Class: Dispersion::Annotator
- Inherits:
-
Prism::Visitor
- Object
- Prism::Visitor
- Dispersion::Annotator
- Defined in:
- lib/dispersion/annotator.rb
Class Method Summary collapse
Instance Method Summary collapse
- #call ⇒ Object
- #highlight(token, loc) ⇒ Object
-
#initialize(code) ⇒ Annotator
constructor
A new instance of Annotator.
- #visit_alternation_pattern_node(node) ⇒ Object
- #visit_and_node(node) ⇒ Object
- #visit_array_node(node) ⇒ Object
- #visit_array_pattern_node(node) ⇒ Object
- #visit_assoc_node(node) ⇒ Object
- #visit_block_argument_node(node) ⇒ Object
- #visit_block_node(node) ⇒ Object
- #visit_block_parameter_node(node) ⇒ Object
- #visit_call_node(node) ⇒ Object
- #visit_capture_pattern_node(node) ⇒ Object
- #visit_case_match_node(node) ⇒ Object
- #visit_case_node(node) ⇒ Object
- #visit_class_node(node) ⇒ Object
- #visit_comment(node) ⇒ Object
- #visit_constant_read_node(node) ⇒ Object
- #visit_def_node(node) ⇒ Object
- #visit_else_node(node) ⇒ Object
- #visit_embedded_statements_node(node) ⇒ Object
- #visit_float_node(node) ⇒ Object
- #visit_forwarding_parameter_node(node) ⇒ Object
- #visit_forwarding_super_node(node) ⇒ Object
- #visit_hash_node(node) ⇒ Object
- #visit_if_node(node) ⇒ Object
- #visit_in_node(node) ⇒ Object
- #visit_instance_variable_and_write_node(node) ⇒ Object
- #visit_instance_variable_or_write_node(node) ⇒ Object
- #visit_instance_variable_read_node(node) ⇒ Object
- #visit_instance_variable_write_node(node) ⇒ Object
- #visit_integer_node(node) ⇒ Object
- #visit_interpolated_string_node(node) ⇒ Object
- #visit_keyword_rest_parameter_node(node) ⇒ Object
- #visit_local_variable_and_write_node(node) ⇒ Object
- #visit_local_variable_or_write_node(node) ⇒ Object
- #visit_local_variable_read_node(node) ⇒ Object
- #visit_local_variable_write_node(node) ⇒ Object
- #visit_module_node(node) ⇒ Object
- #visit_next_node(node) ⇒ Object
- #visit_optional_parameter_node(node) ⇒ Object
- #visit_or_node(node) ⇒ Object
- #visit_parentheses_node(node) ⇒ Object
- #visit_range_node(node) ⇒ Object
- #visit_required_parameter_node(node) ⇒ Object
- #visit_rescue_node(node) ⇒ Object
- #visit_rest_parameter_node(node) ⇒ Object
- #visit_string_node(node) ⇒ Object
- #visit_symbol_node(node) ⇒ Object
- #visit_until_node(node) ⇒ Object
- #visit_when_node(node) ⇒ Object
- #visit_while_node(node) ⇒ Object
Constructor Details
#initialize(code) ⇒ Annotator
Returns a new instance of Annotator.
11 12 13 14 |
# File 'lib/dispersion/annotator.rb', line 11 def initialize(code) @code = code @annotations = [] end |
Class Method Details
.call(code) ⇒ Object
7 8 9 |
# File 'lib/dispersion/annotator.rb', line 7 def self.call(code) new(code).call end |
Instance Method Details
#call ⇒ Object
16 17 18 19 20 21 22 23 |
# File 'lib/dispersion/annotator.rb', line 16 def call @prev_end = 0 parsed = Prism.parse(@code) parsed.comments.each { |c| visit_comment(c) } visit(parsed.value) @annotations.sort_by(&:first) end |
#highlight(token, loc) ⇒ Object
25 26 27 28 29 30 |
# File 'lib/dispersion/annotator.rb', line 25 def highlight(token, loc) return unless loc return if loc.start_line == loc.end_line && loc.start_column == loc.end_column @annotations << [loc.start_offset, loc.end_offset, token].freeze end |
#visit_alternation_pattern_node(node) ⇒ Object
306 307 308 309 |
# File 'lib/dispersion/annotator.rb', line 306 def visit_alternation_pattern_node(node) highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_and_node(node) ⇒ Object
181 182 183 184 |
# File 'lib/dispersion/annotator.rb', line 181 def visit_and_node(node) highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_array_node(node) ⇒ Object
257 258 259 260 261 |
# File 'lib/dispersion/annotator.rb', line 257 def visit_array_node(node) highlight Tokens::PUNCTUATION, node.opening_loc highlight Tokens::PUNCTUATION, node.closing_loc super end |
#visit_array_pattern_node(node) ⇒ Object
300 301 302 303 304 |
# File 'lib/dispersion/annotator.rb', line 300 def visit_array_pattern_node(node) highlight Tokens::PUNCTUATION, node.opening_loc highlight Tokens::PUNCTUATION, node.closing_loc super end |
#visit_assoc_node(node) ⇒ Object
263 264 265 266 |
# File 'lib/dispersion/annotator.rb', line 263 def visit_assoc_node(node) highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_block_argument_node(node) ⇒ Object
176 177 178 179 |
# File 'lib/dispersion/annotator.rb', line 176 def visit_block_argument_node(node) highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_block_node(node) ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/dispersion/annotator.rb', line 114 def visit_block_node(node) if node.opening_loc.length == 1 highlight Tokens::PUNCTUATION, node.opening_loc else highlight Tokens::KEYWORD, node.opening_loc end if node.closing_loc.length == 1 highlight Tokens::PUNCTUATION, node.closing_loc else highlight Tokens::KEYWORD, node.closing_loc end super end |
#visit_block_parameter_node(node) ⇒ Object
219 220 221 222 |
# File 'lib/dispersion/annotator.rb', line 219 def visit_block_parameter_node(node) highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_call_node(node) ⇒ Object
90 91 92 93 94 95 96 |
# File 'lib/dispersion/annotator.rb', line 90 def visit_call_node(node) unless node.name in :[] | :[]= highlight Tokens::FUNCTION, node. end super end |
#visit_capture_pattern_node(node) ⇒ Object
322 323 324 325 |
# File 'lib/dispersion/annotator.rb', line 322 def visit_capture_pattern_node(node) highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_case_match_node(node) ⇒ Object
136 137 138 139 140 |
# File 'lib/dispersion/annotator.rb', line 136 def visit_case_match_node(node) highlight Tokens::KEYWORD, node.case_keyword_loc highlight Tokens::KEYWORD, node.end_keyword_loc super end |
#visit_case_node(node) ⇒ Object
130 131 132 133 134 |
# File 'lib/dispersion/annotator.rb', line 130 def visit_case_node(node) highlight Tokens::KEYWORD, node.case_keyword_loc highlight Tokens::KEYWORD, node.end_keyword_loc super end |
#visit_class_node(node) ⇒ Object
84 85 86 87 88 |
# File 'lib/dispersion/annotator.rb', line 84 def visit_class_node(node) highlight Tokens::KEYWORD, node.class_keyword_loc highlight Tokens::KEYWORD, node.end_keyword_loc super end |
#visit_comment(node) ⇒ Object
32 33 34 |
# File 'lib/dispersion/annotator.rb', line 32 def visit_comment(node) highlight Tokens::COMMENT, node.location end |
#visit_constant_read_node(node) ⇒ Object
79 80 81 82 |
# File 'lib/dispersion/annotator.rb', line 79 def visit_constant_read_node(node) highlight Tokens::CONSTANT, node.location super end |
#visit_def_node(node) ⇒ Object
36 37 38 39 40 41 42 43 |
# File 'lib/dispersion/annotator.rb', line 36 def visit_def_node(node) highlight Tokens::KEYWORD, node.def_keyword_loc highlight Tokens::FUNCTION, node.name_loc highlight Tokens::PUNCTUATION, node.lparen_loc highlight Tokens::PUNCTUATION, node.rparen_loc highlight Tokens::KEYWORD, node.end_keyword_loc super end |
#visit_else_node(node) ⇒ Object
166 167 168 169 170 171 172 173 174 |
# File 'lib/dispersion/annotator.rb', line 166 def visit_else_node(node) if node.else_keyword.length == 1 highlight Tokens::OPERATOR, node.else_keyword_loc else highlight Tokens::KEYWORD, node.else_keyword_loc end super end |
#visit_embedded_statements_node(node) ⇒ Object
277 278 279 280 281 |
# File 'lib/dispersion/annotator.rb', line 277 def (node) highlight Tokens::PUNCTUATION, node.opening_loc highlight Tokens::PUNCTUATION, node.closing_loc super end |
#visit_float_node(node) ⇒ Object
246 247 248 249 |
# File 'lib/dispersion/annotator.rb', line 246 def visit_float_node(node) highlight Tokens::FLOAT, node.location super end |
#visit_forwarding_parameter_node(node) ⇒ Object
268 269 270 271 |
# File 'lib/dispersion/annotator.rb', line 268 def visit_forwarding_parameter_node(node) highlight Tokens::OPERATOR, node.location super end |
#visit_forwarding_super_node(node) ⇒ Object
273 274 275 |
# File 'lib/dispersion/annotator.rb', line 273 def visit_forwarding_super_node(node) highlight Tokens::KEYWORD, node.location end |
#visit_hash_node(node) ⇒ Object
251 252 253 254 255 |
# File 'lib/dispersion/annotator.rb', line 251 def visit_hash_node(node) highlight Tokens::PUNCTUATION, node.opening_loc highlight Tokens::PUNCTUATION, node.closing_loc super end |
#visit_if_node(node) ⇒ Object
148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/dispersion/annotator.rb', line 148 def visit_if_node(node) highlight Tokens::KEYWORD, node.if_keyword_loc highlight Tokens::KEYWORD, node.end_keyword_loc if node.then_keyword&.length == 1 highlight Tokens::OPERATOR, node.then_keyword_loc else highlight Tokens::KEYWORD, node.then_keyword_loc end super end |
#visit_in_node(node) ⇒ Object
294 295 296 297 298 |
# File 'lib/dispersion/annotator.rb', line 294 def visit_in_node(node) highlight Tokens::KEYWORD, node.in_loc highlight Tokens::KEYWORD, node.then_loc super end |
#visit_instance_variable_and_write_node(node) ⇒ Object
62 63 64 65 66 |
# File 'lib/dispersion/annotator.rb', line 62 def visit_instance_variable_and_write_node(node) highlight Tokens::INSTANCE_VARIABLE, node.name_loc highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_instance_variable_or_write_node(node) ⇒ Object
68 69 70 71 72 |
# File 'lib/dispersion/annotator.rb', line 68 def visit_instance_variable_or_write_node(node) highlight Tokens::INSTANCE_VARIABLE, node.name_loc highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_instance_variable_read_node(node) ⇒ Object
74 75 76 77 |
# File 'lib/dispersion/annotator.rb', line 74 def visit_instance_variable_read_node(node) highlight Tokens::INSTANCE_VARIABLE, node.location super end |
#visit_instance_variable_write_node(node) ⇒ Object
56 57 58 59 60 |
# File 'lib/dispersion/annotator.rb', line 56 def visit_instance_variable_write_node(node) highlight Tokens::INSTANCE_VARIABLE, node.name_loc highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_integer_node(node) ⇒ Object
241 242 243 244 |
# File 'lib/dispersion/annotator.rb', line 241 def visit_integer_node(node) highlight Tokens::INTEGER, node.location super end |
#visit_interpolated_string_node(node) ⇒ Object
103 104 105 106 107 |
# File 'lib/dispersion/annotator.rb', line 103 def visit_interpolated_string_node(node) highlight Tokens::PUNCTUATION, node.opening_loc highlight Tokens::PUNCTUATION, node.closing_loc super end |
#visit_keyword_rest_parameter_node(node) ⇒ Object
214 215 216 217 |
# File 'lib/dispersion/annotator.rb', line 214 def visit_keyword_rest_parameter_node(node) highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_local_variable_and_write_node(node) ⇒ Object
197 198 199 200 201 |
# File 'lib/dispersion/annotator.rb', line 197 def visit_local_variable_and_write_node(node) highlight Tokens::LOCAL_VARIABLE, node.name_loc highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_local_variable_or_write_node(node) ⇒ Object
191 192 193 194 195 |
# File 'lib/dispersion/annotator.rb', line 191 def visit_local_variable_or_write_node(node) highlight Tokens::LOCAL_VARIABLE, node.name_loc highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_local_variable_read_node(node) ⇒ Object
51 52 53 54 |
# File 'lib/dispersion/annotator.rb', line 51 def visit_local_variable_read_node(node) highlight Tokens::LOCAL_VARIABLE, node.location super end |
#visit_local_variable_write_node(node) ⇒ Object
45 46 47 48 49 |
# File 'lib/dispersion/annotator.rb', line 45 def visit_local_variable_write_node(node) highlight Tokens::LOCAL_VARIABLE, node.name_loc highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_module_node(node) ⇒ Object
142 143 144 145 146 |
# File 'lib/dispersion/annotator.rb', line 142 def visit_module_node(node) highlight Tokens::KEYWORD, node.module_keyword_loc highlight Tokens::KEYWORD, node.end_keyword_loc super end |
#visit_next_node(node) ⇒ Object
236 237 238 239 |
# File 'lib/dispersion/annotator.rb', line 236 def visit_next_node(node) highlight Tokens::KEYWORD, node.keyword_loc super end |
#visit_optional_parameter_node(node) ⇒ Object
316 317 318 319 320 |
# File 'lib/dispersion/annotator.rb', line 316 def visit_optional_parameter_node(node) highlight Tokens::LOCAL_VARIABLE, node.name_loc highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_or_node(node) ⇒ Object
186 187 188 189 |
# File 'lib/dispersion/annotator.rb', line 186 def visit_or_node(node) highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_parentheses_node(node) ⇒ Object
283 284 285 286 287 |
# File 'lib/dispersion/annotator.rb', line 283 def visit_parentheses_node(node) highlight Tokens::PUNCTUATION, node.opening_loc highlight Tokens::PUNCTUATION, node.closing_loc super end |
#visit_range_node(node) ⇒ Object
289 290 291 292 |
# File 'lib/dispersion/annotator.rb', line 289 def visit_range_node(node) highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_required_parameter_node(node) ⇒ Object
311 312 313 314 |
# File 'lib/dispersion/annotator.rb', line 311 def visit_required_parameter_node(node) highlight Tokens::LOCAL_VARIABLE, node.location super end |
#visit_rescue_node(node) ⇒ Object
203 204 205 206 207 |
# File 'lib/dispersion/annotator.rb', line 203 def visit_rescue_node(node) highlight Tokens::KEYWORD, node.keyword_loc highlight Tokens::KEYWORD, node.operator_loc super end |
#visit_rest_parameter_node(node) ⇒ Object
209 210 211 212 |
# File 'lib/dispersion/annotator.rb', line 209 def visit_rest_parameter_node(node) highlight Tokens::OPERATOR, node.operator_loc super end |
#visit_string_node(node) ⇒ Object
98 99 100 101 |
# File 'lib/dispersion/annotator.rb', line 98 def visit_string_node(node) highlight Tokens::STRING, node.location super end |
#visit_symbol_node(node) ⇒ Object
109 110 111 112 |
# File 'lib/dispersion/annotator.rb', line 109 def visit_symbol_node(node) highlight Tokens::SYMBOL, node.location super end |
#visit_until_node(node) ⇒ Object
230 231 232 233 234 |
# File 'lib/dispersion/annotator.rb', line 230 def visit_until_node(node) highlight Tokens::KEYWORD, node.keyword_loc highlight Tokens::KEYWORD, node.closing_loc super end |
#visit_when_node(node) ⇒ Object
161 162 163 164 |
# File 'lib/dispersion/annotator.rb', line 161 def visit_when_node(node) highlight Tokens::KEYWORD, node.keyword_loc super end |
#visit_while_node(node) ⇒ Object
224 225 226 227 228 |
# File 'lib/dispersion/annotator.rb', line 224 def visit_while_node(node) highlight Tokens::KEYWORD, node.keyword_loc highlight Tokens::KEYWORD, node.closing_loc super end |