ruby-lsp 0.13.2 → 0.13.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +30 -0
  3. data/VERSION +1 -1
  4. data/lib/ruby_lsp/check_docs.rb +3 -3
  5. data/lib/ruby_lsp/document.rb +12 -0
  6. data/lib/ruby_lsp/executor.rb +77 -266
  7. data/lib/ruby_lsp/listener.rb +1 -50
  8. data/lib/ruby_lsp/listeners/code_lens.rb +233 -0
  9. data/lib/ruby_lsp/listeners/completion.rb +275 -0
  10. data/lib/ruby_lsp/listeners/definition.rb +158 -0
  11. data/lib/ruby_lsp/listeners/document_highlight.rb +556 -0
  12. data/lib/ruby_lsp/listeners/document_link.rb +162 -0
  13. data/lib/ruby_lsp/listeners/document_symbol.rb +223 -0
  14. data/lib/ruby_lsp/listeners/folding_ranges.rb +271 -0
  15. data/lib/ruby_lsp/listeners/hover.rb +152 -0
  16. data/lib/ruby_lsp/listeners/inlay_hints.rb +80 -0
  17. data/lib/ruby_lsp/listeners/semantic_highlighting.rb +430 -0
  18. data/lib/ruby_lsp/listeners/signature_help.rb +74 -0
  19. data/lib/ruby_lsp/requests/code_action_resolve.rb +4 -4
  20. data/lib/ruby_lsp/requests/code_actions.rb +13 -4
  21. data/lib/ruby_lsp/requests/code_lens.rb +21 -221
  22. data/lib/ruby_lsp/requests/completion.rb +64 -244
  23. data/lib/ruby_lsp/requests/definition.rb +34 -147
  24. data/lib/ruby_lsp/requests/diagnostics.rb +17 -5
  25. data/lib/ruby_lsp/requests/document_highlight.rb +12 -536
  26. data/lib/ruby_lsp/requests/document_link.rb +11 -132
  27. data/lib/ruby_lsp/requests/document_symbol.rb +23 -210
  28. data/lib/ruby_lsp/requests/folding_ranges.rb +16 -252
  29. data/lib/ruby_lsp/requests/formatting.rb +4 -4
  30. data/lib/ruby_lsp/requests/hover.rb +48 -92
  31. data/lib/ruby_lsp/requests/inlay_hints.rb +23 -56
  32. data/lib/ruby_lsp/requests/on_type_formatting.rb +16 -4
  33. data/lib/ruby_lsp/requests/request.rb +17 -0
  34. data/lib/ruby_lsp/requests/selection_ranges.rb +4 -3
  35. data/lib/ruby_lsp/requests/semantic_highlighting.rb +21 -408
  36. data/lib/ruby_lsp/requests/show_syntax_tree.rb +4 -4
  37. data/lib/ruby_lsp/requests/signature_help.rb +43 -51
  38. data/lib/ruby_lsp/requests/support/common.rb +3 -2
  39. data/lib/ruby_lsp/requests/support/dependency_detector.rb +2 -0
  40. data/lib/ruby_lsp/requests/support/semantic_token_encoder.rb +2 -2
  41. data/lib/ruby_lsp/requests/workspace_symbol.rb +5 -4
  42. data/lib/ruby_lsp/requests.rb +1 -1
  43. data/lib/ruby_lsp/utils.rb +8 -0
  44. metadata +15 -4
  45. data/lib/ruby_lsp/requests/base_request.rb +0 -24
@@ -1,6 +1,8 @@
1
1
  # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
+ require "ruby_lsp/listeners/document_highlight"
5
+
4
6
  module RubyLsp
5
7
  module Requests
6
8
  # ![Document highlight demo](../../document_highlight.gif)
@@ -22,553 +24,27 @@ module RubyLsp
22
24
  # FOO # should be highlighted as "read"
23
25
  # end
24
26
  # ```
25
- class DocumentHighlight < Listener
27
+ class DocumentHighlight < Request
26
28
  extend T::Sig
27
29
 
28
30
  ResponseType = type_member { { fixed: T::Array[Interface::DocumentHighlight] } }
29
31
 
30
- GLOBAL_VARIABLE_NODES = T.let(
31
- [
32
- Prism::GlobalVariableAndWriteNode,
33
- Prism::GlobalVariableOperatorWriteNode,
34
- Prism::GlobalVariableOrWriteNode,
35
- Prism::GlobalVariableReadNode,
36
- Prism::GlobalVariableTargetNode,
37
- Prism::GlobalVariableWriteNode,
38
- ],
39
- T::Array[T.class_of(Prism::Node)],
40
- )
41
-
42
- INSTANCE_VARIABLE_NODES = T.let(
43
- [
44
- Prism::InstanceVariableAndWriteNode,
45
- Prism::InstanceVariableOperatorWriteNode,
46
- Prism::InstanceVariableOrWriteNode,
47
- Prism::InstanceVariableReadNode,
48
- Prism::InstanceVariableTargetNode,
49
- Prism::InstanceVariableWriteNode,
50
- ],
51
- T::Array[T.class_of(Prism::Node)],
52
- )
53
-
54
- CONSTANT_NODES = T.let(
55
- [
56
- Prism::ConstantAndWriteNode,
57
- Prism::ConstantOperatorWriteNode,
58
- Prism::ConstantOrWriteNode,
59
- Prism::ConstantReadNode,
60
- Prism::ConstantTargetNode,
61
- Prism::ConstantWriteNode,
62
- ],
63
- T::Array[T.class_of(Prism::Node)],
64
- )
65
-
66
- CONSTANT_PATH_NODES = T.let(
67
- [
68
- Prism::ConstantPathAndWriteNode,
69
- Prism::ConstantPathNode,
70
- Prism::ConstantPathOperatorWriteNode,
71
- Prism::ConstantPathOrWriteNode,
72
- Prism::ConstantPathTargetNode,
73
- Prism::ConstantPathWriteNode,
74
- ],
75
- T::Array[T.class_of(Prism::Node)],
76
- )
77
-
78
- CLASS_VARIABLE_NODES = T.let(
79
- [
80
- Prism::ClassVariableAndWriteNode,
81
- Prism::ClassVariableOperatorWriteNode,
82
- Prism::ClassVariableOrWriteNode,
83
- Prism::ClassVariableReadNode,
84
- Prism::ClassVariableTargetNode,
85
- Prism::ClassVariableWriteNode,
86
- ],
87
- T::Array[T.class_of(Prism::Node)],
88
- )
89
-
90
- LOCAL_NODES = T.let(
91
- [
92
- Prism::LocalVariableAndWriteNode,
93
- Prism::LocalVariableOperatorWriteNode,
94
- Prism::LocalVariableOrWriteNode,
95
- Prism::LocalVariableReadNode,
96
- Prism::LocalVariableTargetNode,
97
- Prism::LocalVariableWriteNode,
98
- Prism::BlockParameterNode,
99
- Prism::RequiredParameterNode,
100
- Prism::RequiredKeywordParameterNode,
101
- Prism::OptionalKeywordParameterNode,
102
- Prism::RestParameterNode,
103
- Prism::OptionalParameterNode,
104
- Prism::KeywordRestParameterNode,
105
- ],
106
- T::Array[T.class_of(Prism::Node)],
107
- )
108
-
109
- sig { override.returns(ResponseType) }
110
- attr_reader :_response
111
-
112
32
  sig do
113
33
  params(
114
- target: T.nilable(Prism::Node),
115
- parent: T.nilable(Prism::Node),
34
+ document: Document,
35
+ position: T::Hash[Symbol, T.untyped],
116
36
  dispatcher: Prism::Dispatcher,
117
37
  ).void
118
38
  end
119
- def initialize(target, parent, dispatcher)
120
- super(dispatcher)
121
-
122
- @_response = T.let([], T::Array[Interface::DocumentHighlight])
123
-
124
- return unless target && parent
125
-
126
- highlight_target =
127
- case target
128
- when Prism::GlobalVariableReadNode, Prism::GlobalVariableAndWriteNode, Prism::GlobalVariableOperatorWriteNode,
129
- Prism::GlobalVariableOrWriteNode, Prism::GlobalVariableTargetNode, Prism::GlobalVariableWriteNode,
130
- Prism::InstanceVariableAndWriteNode, Prism::InstanceVariableOperatorWriteNode,
131
- Prism::InstanceVariableOrWriteNode, Prism::InstanceVariableReadNode, Prism::InstanceVariableTargetNode,
132
- Prism::InstanceVariableWriteNode, Prism::ConstantAndWriteNode, Prism::ConstantOperatorWriteNode,
133
- Prism::ConstantOrWriteNode, Prism::ConstantPathAndWriteNode, Prism::ConstantPathNode,
134
- Prism::ConstantPathOperatorWriteNode, Prism::ConstantPathOrWriteNode, Prism::ConstantPathTargetNode,
135
- Prism::ConstantPathWriteNode, Prism::ConstantReadNode, Prism::ConstantTargetNode, Prism::ConstantWriteNode,
136
- Prism::ClassVariableAndWriteNode, Prism::ClassVariableOperatorWriteNode, Prism::ClassVariableOrWriteNode,
137
- Prism::ClassVariableReadNode, Prism::ClassVariableTargetNode, Prism::ClassVariableWriteNode,
138
- Prism::LocalVariableAndWriteNode, Prism::LocalVariableOperatorWriteNode, Prism::LocalVariableOrWriteNode,
139
- Prism::LocalVariableReadNode, Prism::LocalVariableTargetNode, Prism::LocalVariableWriteNode,
140
- Prism::CallNode, Prism::BlockParameterNode, Prism::RequiredKeywordParameterNode,
141
- Prism::RequiredKeywordParameterNode, Prism::KeywordRestParameterNode, Prism::OptionalParameterNode,
142
- Prism::RequiredParameterNode, Prism::RestParameterNode
143
- target
144
- end
145
-
146
- @target = T.let(highlight_target, T.nilable(Prism::Node))
147
- @target_value = T.let(node_value(highlight_target), T.nilable(String))
148
-
149
- if @target && @target_value
150
- dispatcher.register(
151
- self,
152
- :on_call_node_enter,
153
- :on_def_node_enter,
154
- :on_global_variable_target_node_enter,
155
- :on_instance_variable_target_node_enter,
156
- :on_constant_path_target_node_enter,
157
- :on_constant_target_node_enter,
158
- :on_class_variable_target_node_enter,
159
- :on_local_variable_target_node_enter,
160
- :on_block_parameter_node_enter,
161
- :on_required_parameter_node_enter,
162
- :on_class_node_enter,
163
- :on_module_node_enter,
164
- :on_local_variable_read_node_enter,
165
- :on_constant_path_node_enter,
166
- :on_constant_read_node_enter,
167
- :on_instance_variable_read_node_enter,
168
- :on_class_variable_read_node_enter,
169
- :on_global_variable_read_node_enter,
170
- :on_constant_path_write_node_enter,
171
- :on_constant_path_or_write_node_enter,
172
- :on_constant_path_and_write_node_enter,
173
- :on_constant_path_operator_write_node_enter,
174
- :on_local_variable_write_node_enter,
175
- :on_required_keyword_parameter_node_enter,
176
- :on_optional_keyword_parameter_node_enter,
177
- :on_rest_parameter_node_enter,
178
- :on_optional_parameter_node_enter,
179
- :on_keyword_rest_parameter_node_enter,
180
- :on_local_variable_and_write_node_enter,
181
- :on_local_variable_operator_write_node_enter,
182
- :on_local_variable_or_write_node_enter,
183
- :on_class_variable_write_node_enter,
184
- :on_class_variable_or_write_node_enter,
185
- :on_class_variable_operator_write_node_enter,
186
- :on_class_variable_and_write_node_enter,
187
- :on_constant_write_node_enter,
188
- :on_constant_or_write_node_enter,
189
- :on_constant_operator_write_node_enter,
190
- :on_instance_variable_write_node_enter,
191
- :on_constant_and_write_node_enter,
192
- :on_instance_variable_or_write_node_enter,
193
- :on_instance_variable_and_write_node_enter,
194
- :on_instance_variable_operator_write_node_enter,
195
- :on_global_variable_write_node_enter,
196
- :on_global_variable_or_write_node_enter,
197
- :on_global_variable_and_write_node_enter,
198
- :on_global_variable_operator_write_node_enter,
199
- )
200
- end
201
- end
202
-
203
- sig { params(node: Prism::CallNode).void }
204
- def on_call_node_enter(node)
205
- return unless matches?(node, [Prism::CallNode, Prism::DefNode])
206
-
207
- add_highlight(Constant::DocumentHighlightKind::READ, node.location)
208
- end
209
-
210
- sig { params(node: Prism::DefNode).void }
211
- def on_def_node_enter(node)
212
- return unless matches?(node, [Prism::CallNode, Prism::DefNode])
213
-
214
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
215
- end
216
-
217
- sig { params(node: Prism::GlobalVariableTargetNode).void }
218
- def on_global_variable_target_node_enter(node)
219
- return unless matches?(node, GLOBAL_VARIABLE_NODES)
220
-
221
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
222
- end
223
-
224
- sig { params(node: Prism::InstanceVariableTargetNode).void }
225
- def on_instance_variable_target_node_enter(node)
226
- return unless matches?(node, INSTANCE_VARIABLE_NODES)
227
-
228
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
229
- end
230
-
231
- sig { params(node: Prism::ConstantPathTargetNode).void }
232
- def on_constant_path_target_node_enter(node)
233
- return unless matches?(node, CONSTANT_PATH_NODES)
234
-
235
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
236
- end
237
-
238
- sig { params(node: Prism::ConstantTargetNode).void }
239
- def on_constant_target_node_enter(node)
240
- return unless matches?(node, CONSTANT_NODES)
241
-
242
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
243
- end
244
-
245
- sig { params(node: Prism::ClassVariableTargetNode).void }
246
- def on_class_variable_target_node_enter(node)
247
- return unless matches?(node, CLASS_VARIABLE_NODES)
248
-
249
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
250
- end
251
-
252
- sig { params(node: Prism::LocalVariableTargetNode).void }
253
- def on_local_variable_target_node_enter(node)
254
- return unless matches?(node, LOCAL_NODES)
255
-
256
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
257
- end
258
-
259
- sig { params(node: Prism::BlockParameterNode).void }
260
- def on_block_parameter_node_enter(node)
261
- return unless matches?(node, LOCAL_NODES)
262
-
263
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
264
- end
265
-
266
- sig { params(node: Prism::RequiredParameterNode).void }
267
- def on_required_parameter_node_enter(node)
268
- return unless matches?(node, LOCAL_NODES)
269
-
270
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
271
- end
272
-
273
- sig { params(node: Prism::ClassNode).void }
274
- def on_class_node_enter(node)
275
- return unless matches?(node, CONSTANT_NODES + CONSTANT_PATH_NODES + [Prism::ClassNode])
276
-
277
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.constant_path.location)
278
- end
279
-
280
- sig { params(node: Prism::ModuleNode).void }
281
- def on_module_node_enter(node)
282
- return unless matches?(node, CONSTANT_NODES + CONSTANT_PATH_NODES + [Prism::ModuleNode])
283
-
284
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.constant_path.location)
285
- end
286
-
287
- sig { params(node: Prism::LocalVariableReadNode).void }
288
- def on_local_variable_read_node_enter(node)
289
- return unless matches?(node, LOCAL_NODES)
290
-
291
- add_highlight(Constant::DocumentHighlightKind::READ, node.location)
292
- end
293
-
294
- sig { params(node: Prism::ConstantPathNode).void }
295
- def on_constant_path_node_enter(node)
296
- return unless matches?(node, CONSTANT_PATH_NODES)
297
-
298
- add_highlight(Constant::DocumentHighlightKind::READ, node.location)
299
- end
300
-
301
- sig { params(node: Prism::ConstantReadNode).void }
302
- def on_constant_read_node_enter(node)
303
- return unless matches?(node, CONSTANT_NODES)
304
-
305
- add_highlight(Constant::DocumentHighlightKind::READ, node.location)
306
- end
307
-
308
- sig { params(node: Prism::InstanceVariableReadNode).void }
309
- def on_instance_variable_read_node_enter(node)
310
- return unless matches?(node, INSTANCE_VARIABLE_NODES)
311
-
312
- add_highlight(Constant::DocumentHighlightKind::READ, node.location)
313
- end
314
-
315
- sig { params(node: Prism::ClassVariableReadNode).void }
316
- def on_class_variable_read_node_enter(node)
317
- return unless matches?(node, CLASS_VARIABLE_NODES)
318
-
319
- add_highlight(Constant::DocumentHighlightKind::READ, node.location)
320
- end
321
-
322
- sig { params(node: Prism::GlobalVariableReadNode).void }
323
- def on_global_variable_read_node_enter(node)
324
- return unless matches?(node, GLOBAL_VARIABLE_NODES)
325
-
326
- add_highlight(Constant::DocumentHighlightKind::READ, node.location)
327
- end
328
-
329
- sig { params(node: Prism::ConstantPathWriteNode).void }
330
- def on_constant_path_write_node_enter(node)
331
- return unless matches?(node, CONSTANT_PATH_NODES)
332
-
333
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.target.location)
334
- end
335
-
336
- sig { params(node: Prism::ConstantPathOrWriteNode).void }
337
- def on_constant_path_or_write_node_enter(node)
338
- return unless matches?(node, CONSTANT_PATH_NODES)
339
-
340
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.target.location)
341
- end
342
-
343
- sig { params(node: Prism::ConstantPathAndWriteNode).void }
344
- def on_constant_path_and_write_node_enter(node)
345
- return unless matches?(node, CONSTANT_PATH_NODES)
346
-
347
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.target.location)
348
- end
349
-
350
- sig { params(node: Prism::ConstantPathOperatorWriteNode).void }
351
- def on_constant_path_operator_write_node_enter(node)
352
- return unless matches?(node, CONSTANT_PATH_NODES)
353
-
354
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.target.location)
355
- end
356
-
357
- sig { params(node: Prism::LocalVariableWriteNode).void }
358
- def on_local_variable_write_node_enter(node)
359
- return unless matches?(node, LOCAL_NODES)
360
-
361
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
362
- end
363
-
364
- sig { params(node: Prism::RequiredKeywordParameterNode).void }
365
- def on_required_keyword_parameter_node_enter(node)
366
- return unless matches?(node, LOCAL_NODES)
367
-
368
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
369
- end
370
-
371
- sig { params(node: Prism::OptionalKeywordParameterNode).void }
372
- def on_optional_keyword_parameter_node_enter(node)
373
- return unless matches?(node, LOCAL_NODES)
374
-
375
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
376
- end
377
-
378
- sig { params(node: Prism::RestParameterNode).void }
379
- def on_rest_parameter_node_enter(node)
380
- return unless matches?(node, LOCAL_NODES)
381
-
382
- name_loc = node.name_loc
383
- add_highlight(Constant::DocumentHighlightKind::WRITE, name_loc) if name_loc
384
- end
385
-
386
- sig { params(node: Prism::OptionalParameterNode).void }
387
- def on_optional_parameter_node_enter(node)
388
- return unless matches?(node, LOCAL_NODES)
389
-
390
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
391
- end
392
-
393
- sig { params(node: Prism::KeywordRestParameterNode).void }
394
- def on_keyword_rest_parameter_node_enter(node)
395
- return unless matches?(node, LOCAL_NODES)
396
-
397
- name_loc = node.name_loc
398
- add_highlight(Constant::DocumentHighlightKind::WRITE, name_loc) if name_loc
399
- end
400
-
401
- sig { params(node: Prism::LocalVariableAndWriteNode).void }
402
- def on_local_variable_and_write_node_enter(node)
403
- return unless matches?(node, LOCAL_NODES)
404
-
405
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
406
- end
407
-
408
- sig { params(node: Prism::LocalVariableOperatorWriteNode).void }
409
- def on_local_variable_operator_write_node_enter(node)
410
- return unless matches?(node, LOCAL_NODES)
411
-
412
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
413
- end
414
-
415
- sig { params(node: Prism::LocalVariableOrWriteNode).void }
416
- def on_local_variable_or_write_node_enter(node)
417
- return unless matches?(node, LOCAL_NODES)
418
-
419
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
420
- end
421
-
422
- sig { params(node: Prism::ClassVariableWriteNode).void }
423
- def on_class_variable_write_node_enter(node)
424
- return unless matches?(node, CLASS_VARIABLE_NODES)
425
-
426
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
427
- end
428
-
429
- sig { params(node: Prism::ClassVariableOrWriteNode).void }
430
- def on_class_variable_or_write_node_enter(node)
431
- return unless matches?(node, CLASS_VARIABLE_NODES)
432
-
433
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
434
- end
435
-
436
- sig { params(node: Prism::ClassVariableOperatorWriteNode).void }
437
- def on_class_variable_operator_write_node_enter(node)
438
- return unless matches?(node, CLASS_VARIABLE_NODES)
439
-
440
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
441
- end
442
-
443
- sig { params(node: Prism::ClassVariableAndWriteNode).void }
444
- def on_class_variable_and_write_node_enter(node)
445
- return unless matches?(node, CLASS_VARIABLE_NODES)
446
-
447
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
448
- end
449
-
450
- sig { params(node: Prism::ConstantWriteNode).void }
451
- def on_constant_write_node_enter(node)
452
- return unless matches?(node, CONSTANT_NODES)
453
-
454
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
39
+ def initialize(document, position, dispatcher)
40
+ super()
41
+ target, parent = document.locate_node(position)
42
+ @listener = T.let(Listeners::DocumentHighlight.new(target, parent, dispatcher), Listener[ResponseType])
455
43
  end
456
44
 
457
- sig { params(node: Prism::ConstantOrWriteNode).void }
458
- def on_constant_or_write_node_enter(node)
459
- return unless matches?(node, CONSTANT_NODES)
460
-
461
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
462
- end
463
-
464
- sig { params(node: Prism::ConstantOperatorWriteNode).void }
465
- def on_constant_operator_write_node_enter(node)
466
- return unless matches?(node, CONSTANT_NODES)
467
-
468
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
469
- end
470
-
471
- sig { params(node: Prism::InstanceVariableWriteNode).void }
472
- def on_instance_variable_write_node_enter(node)
473
- return unless matches?(node, INSTANCE_VARIABLE_NODES)
474
-
475
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
476
- end
477
-
478
- sig { params(node: Prism::InstanceVariableOrWriteNode).void }
479
- def on_instance_variable_or_write_node_enter(node)
480
- return unless matches?(node, INSTANCE_VARIABLE_NODES)
481
-
482
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
483
- end
484
-
485
- sig { params(node: Prism::InstanceVariableAndWriteNode).void }
486
- def on_instance_variable_and_write_node_enter(node)
487
- return unless matches?(node, INSTANCE_VARIABLE_NODES)
488
-
489
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
490
- end
491
-
492
- sig { params(node: Prism::InstanceVariableOperatorWriteNode).void }
493
- def on_instance_variable_operator_write_node_enter(node)
494
- return unless matches?(node, INSTANCE_VARIABLE_NODES)
495
-
496
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
497
- end
498
-
499
- sig { params(node: Prism::ConstantAndWriteNode).void }
500
- def on_constant_and_write_node_enter(node)
501
- return unless matches?(node, CONSTANT_NODES)
502
-
503
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
504
- end
505
-
506
- sig { params(node: Prism::GlobalVariableWriteNode).void }
507
- def on_global_variable_write_node_enter(node)
508
- return unless matches?(node, GLOBAL_VARIABLE_NODES)
509
-
510
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
511
- end
512
-
513
- sig { params(node: Prism::GlobalVariableOrWriteNode).void }
514
- def on_global_variable_or_write_node_enter(node)
515
- return unless matches?(node, GLOBAL_VARIABLE_NODES)
516
-
517
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
518
- end
519
-
520
- sig { params(node: Prism::GlobalVariableAndWriteNode).void }
521
- def on_global_variable_and_write_node_enter(node)
522
- return unless matches?(node, GLOBAL_VARIABLE_NODES)
523
-
524
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
525
- end
526
-
527
- sig { params(node: Prism::GlobalVariableOperatorWriteNode).void }
528
- def on_global_variable_operator_write_node_enter(node)
529
- return unless matches?(node, GLOBAL_VARIABLE_NODES)
530
-
531
- add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
532
- end
533
-
534
- private
535
-
536
- sig { params(node: Prism::Node, classes: T::Array[T.class_of(Prism::Node)]).returns(T.nilable(T::Boolean)) }
537
- def matches?(node, classes)
538
- classes.any? { |klass| @target.is_a?(klass) } && @target_value == node_value(node)
539
- end
540
-
541
- sig { params(kind: Integer, location: Prism::Location).void }
542
- def add_highlight(kind, location)
543
- @_response << Interface::DocumentHighlight.new(range: range_from_location(location), kind: kind)
544
- end
545
-
546
- sig { params(node: T.nilable(Prism::Node)).returns(T.nilable(String)) }
547
- def node_value(node)
548
- case node
549
- when Prism::ConstantReadNode, Prism::ConstantPathNode, Prism::BlockArgumentNode, Prism::ConstantTargetNode,
550
- Prism::ConstantPathWriteNode, Prism::ConstantPathTargetNode, Prism::ConstantPathOrWriteNode,
551
- Prism::ConstantPathOperatorWriteNode, Prism::ConstantPathAndWriteNode
552
- node.slice
553
- when Prism::GlobalVariableReadNode, Prism::GlobalVariableAndWriteNode, Prism::GlobalVariableOperatorWriteNode,
554
- Prism::GlobalVariableOrWriteNode, Prism::GlobalVariableTargetNode, Prism::GlobalVariableWriteNode,
555
- Prism::InstanceVariableAndWriteNode, Prism::InstanceVariableOperatorWriteNode,
556
- Prism::InstanceVariableOrWriteNode, Prism::InstanceVariableReadNode, Prism::InstanceVariableTargetNode,
557
- Prism::InstanceVariableWriteNode, Prism::ConstantAndWriteNode, Prism::ConstantOperatorWriteNode,
558
- Prism::ConstantOrWriteNode, Prism::ConstantWriteNode, Prism::ClassVariableAndWriteNode,
559
- Prism::ClassVariableOperatorWriteNode, Prism::ClassVariableOrWriteNode, Prism::ClassVariableReadNode,
560
- Prism::ClassVariableTargetNode, Prism::ClassVariableWriteNode, Prism::LocalVariableAndWriteNode,
561
- Prism::LocalVariableOperatorWriteNode, Prism::LocalVariableOrWriteNode, Prism::LocalVariableReadNode,
562
- Prism::LocalVariableTargetNode, Prism::LocalVariableWriteNode, Prism::DefNode, Prism::BlockParameterNode,
563
- Prism::RequiredKeywordParameterNode, Prism::OptionalKeywordParameterNode, Prism::KeywordRestParameterNode,
564
- Prism::OptionalParameterNode, Prism::RequiredParameterNode, Prism::RestParameterNode
565
-
566
- node.name.to_s
567
- when Prism::CallNode
568
- node.message
569
- when Prism::ClassNode, Prism::ModuleNode
570
- node.constant_path.slice
571
- end
45
+ sig { override.returns(ResponseType) }
46
+ def perform
47
+ @listener.response
572
48
  end
573
49
  end
574
50
  end