Class: RubyLsp::Listeners::DocumentHighlight

Inherits:
Object
  • Object
show all
Includes:
Requests::Support::Common
Defined in:
lib/ruby_lsp/listeners/document_highlight.rb

Constant Summary collapse

GLOBAL_VARIABLE_NODES =
[
  Prism::GlobalVariableAndWriteNode,
  Prism::GlobalVariableOperatorWriteNode,
  Prism::GlobalVariableOrWriteNode,
  Prism::GlobalVariableReadNode,
  Prism::GlobalVariableTargetNode,
  Prism::GlobalVariableWriteNode,
]
INSTANCE_VARIABLE_NODES =

: Array

[
  Prism::InstanceVariableAndWriteNode,
  Prism::InstanceVariableOperatorWriteNode,
  Prism::InstanceVariableOrWriteNode,
  Prism::InstanceVariableReadNode,
  Prism::InstanceVariableTargetNode,
  Prism::InstanceVariableWriteNode,
]
CONSTANT_NODES =

: Array

[
  Prism::ConstantAndWriteNode,
  Prism::ConstantOperatorWriteNode,
  Prism::ConstantOrWriteNode,
  Prism::ConstantReadNode,
  Prism::ConstantTargetNode,
  Prism::ConstantWriteNode,
]
CONSTANT_PATH_NODES =

: Array

[
  Prism::ConstantPathAndWriteNode,
  Prism::ConstantPathNode,
  Prism::ConstantPathOperatorWriteNode,
  Prism::ConstantPathOrWriteNode,
  Prism::ConstantPathTargetNode,
  Prism::ConstantPathWriteNode,
]
CLASS_VARIABLE_NODES =

: Array

[
  Prism::ClassVariableAndWriteNode,
  Prism::ClassVariableOperatorWriteNode,
  Prism::ClassVariableOrWriteNode,
  Prism::ClassVariableReadNode,
  Prism::ClassVariableTargetNode,
  Prism::ClassVariableWriteNode,
]
LOCAL_NODES =

: Array

[
  Prism::LocalVariableAndWriteNode,
  Prism::LocalVariableOperatorWriteNode,
  Prism::LocalVariableOrWriteNode,
  Prism::LocalVariableReadNode,
  Prism::LocalVariableTargetNode,
  Prism::LocalVariableWriteNode,
  Prism::BlockParameterNode,
  Prism::RequiredParameterNode,
  Prism::RequiredKeywordParameterNode,
  Prism::OptionalKeywordParameterNode,
  Prism::RestParameterNode,
  Prism::OptionalParameterNode,
  Prism::KeywordRestParameterNode,
]

Instance Method Summary collapse

Methods included from Requests::Support::Common

#categorized_markdown_from_index_entries, #constant_name, #create_code_lens, #each_constant_path_part, #kind_for_entry, #markdown_from_index_entries, #namespace_constant_name, #not_in_dependencies?, #range_from_location, #range_from_node, #self_receiver?

Constructor Details

#initialize(response_builder, target, parent, dispatcher, position) ⇒ DocumentHighlight

: (ResponseBuilders::CollectionResponseBuilder response_builder, Prism::Node? target, Prism::Node? parent, Prism::Dispatcher dispatcher, Hash[Symbol, untyped] position) -> void



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 71

def initialize(response_builder, target, parent, dispatcher, position)
  @response_builder = response_builder

  return unless target && parent

  highlight_target, highlight_target_value =
    case target
    when Prism::GlobalVariableReadNode, Prism::GlobalVariableAndWriteNode, Prism::GlobalVariableOperatorWriteNode,
      Prism::GlobalVariableOrWriteNode, Prism::GlobalVariableTargetNode, Prism::GlobalVariableWriteNode,
      Prism::InstanceVariableAndWriteNode, Prism::InstanceVariableOperatorWriteNode,
      Prism::InstanceVariableOrWriteNode, Prism::InstanceVariableReadNode, Prism::InstanceVariableTargetNode,
      Prism::InstanceVariableWriteNode, Prism::ConstantAndWriteNode, Prism::ConstantOperatorWriteNode,
      Prism::ConstantOrWriteNode, Prism::ConstantPathAndWriteNode, Prism::ConstantPathNode,
      Prism::ConstantPathOperatorWriteNode, Prism::ConstantPathOrWriteNode, Prism::ConstantPathTargetNode,
      Prism::ConstantPathWriteNode, Prism::ConstantReadNode, Prism::ConstantTargetNode, Prism::ConstantWriteNode,
      Prism::ClassVariableAndWriteNode, Prism::ClassVariableOperatorWriteNode, Prism::ClassVariableOrWriteNode,
      Prism::ClassVariableReadNode, Prism::ClassVariableTargetNode, Prism::ClassVariableWriteNode,
      Prism::LocalVariableAndWriteNode, Prism::LocalVariableOperatorWriteNode, Prism::LocalVariableOrWriteNode,
      Prism::LocalVariableReadNode, Prism::LocalVariableTargetNode, Prism::LocalVariableWriteNode,
      Prism::CallNode, Prism::BlockParameterNode, Prism::RequiredKeywordParameterNode,
      Prism::RequiredKeywordParameterNode, Prism::KeywordRestParameterNode, Prism::OptionalParameterNode,
      Prism::RequiredParameterNode, Prism::RestParameterNode
      [target, node_value(target)]
    when Prism::ModuleNode, Prism::ClassNode, Prism::SingletonClassNode, Prism::DefNode, Prism::CaseNode,
      Prism::WhileNode, Prism::UntilNode, Prism::ForNode, Prism::IfNode, Prism::UnlessNode, Prism::BlockNode,
      Prism::LambdaNode, Prism::BeginNode
      [target, nil]
    end

  @target = highlight_target #: Prism::Node?
  @target_value = highlight_target_value #: String?
  @target_position = position

  if @target
    dispatcher.register(
      self,
      :on_call_node_enter,
      :on_def_node_enter,
      :on_global_variable_target_node_enter,
      :on_instance_variable_target_node_enter,
      :on_constant_path_target_node_enter,
      :on_constant_target_node_enter,
      :on_class_variable_target_node_enter,
      :on_local_variable_target_node_enter,
      :on_block_parameter_node_enter,
      :on_required_parameter_node_enter,
      :on_class_node_enter,
      :on_module_node_enter,
      :on_local_variable_read_node_enter,
      :on_constant_path_node_enter,
      :on_constant_read_node_enter,
      :on_instance_variable_read_node_enter,
      :on_class_variable_read_node_enter,
      :on_global_variable_read_node_enter,
      :on_constant_path_write_node_enter,
      :on_constant_path_or_write_node_enter,
      :on_constant_path_and_write_node_enter,
      :on_constant_path_operator_write_node_enter,
      :on_local_variable_write_node_enter,
      :on_required_keyword_parameter_node_enter,
      :on_optional_keyword_parameter_node_enter,
      :on_rest_parameter_node_enter,
      :on_optional_parameter_node_enter,
      :on_keyword_rest_parameter_node_enter,
      :on_local_variable_and_write_node_enter,
      :on_local_variable_operator_write_node_enter,
      :on_local_variable_or_write_node_enter,
      :on_class_variable_write_node_enter,
      :on_class_variable_or_write_node_enter,
      :on_class_variable_operator_write_node_enter,
      :on_class_variable_and_write_node_enter,
      :on_constant_write_node_enter,
      :on_constant_or_write_node_enter,
      :on_constant_operator_write_node_enter,
      :on_instance_variable_write_node_enter,
      :on_constant_and_write_node_enter,
      :on_instance_variable_or_write_node_enter,
      :on_instance_variable_and_write_node_enter,
      :on_instance_variable_operator_write_node_enter,
      :on_global_variable_write_node_enter,
      :on_global_variable_or_write_node_enter,
      :on_global_variable_and_write_node_enter,
      :on_global_variable_operator_write_node_enter,
      :on_singleton_class_node_enter,
      :on_case_node_enter,
      :on_while_node_enter,
      :on_until_node_enter,
      :on_for_node_enter,
      :on_if_node_enter,
      :on_unless_node_enter,
      :on_block_node_enter,
      :on_lambda_node_enter,
      :on_begin_node_enter,
    )
  end
end

Instance Method Details

#on_begin_node_enter(node) ⇒ Object

: (Prism::BeginNode node) -> void



573
574
575
576
577
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 573

def on_begin_node_enter(node)
  return unless @target.is_a?(Prism::BeginNode)

  add_matching_end_highlights(node.begin_keyword_loc, node.end_keyword_loc)
end

#on_block_node_enter(node) ⇒ Object

: (Prism::BlockNode node) -> void



559
560
561
562
563
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 559

def on_block_node_enter(node)
  return unless @target.is_a?(Prism::BlockNode)

  add_matching_end_highlights(node.opening_loc, node.closing_loc)
end

#on_block_parameter_node_enter(node) ⇒ Object

: (Prism::BlockParameterNode node) -> void



231
232
233
234
235
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 231

def on_block_parameter_node_enter(node)
  return unless matches?(node, LOCAL_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
end

#on_call_node_enter(node) ⇒ Object

: (Prism::CallNode node) -> void



169
170
171
172
173
174
175
176
177
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 169

def on_call_node_enter(node)
  return unless matches?(node, [Prism::CallNode, Prism::DefNode])

  loc = node.message_loc
  # if we have `foo.` it's a call node but there is no message yet.
  return unless loc

  add_highlight(Constant::DocumentHighlightKind::READ, loc)
end

#on_case_node_enter(node) ⇒ Object

: (Prism::CaseNode node) -> void



517
518
519
520
521
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 517

def on_case_node_enter(node)
  return unless @target.is_a?(Prism::CaseNode)

  add_matching_end_highlights(node.case_keyword_loc, node.end_keyword_loc)
end

#on_class_node_enter(node) ⇒ Object

: (Prism::ClassNode node) -> void



245
246
247
248
249
250
251
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 245

def on_class_node_enter(node)
  add_matching_end_highlights(node.class_keyword_loc, node.end_keyword_loc) if @target.is_a?(Prism::ClassNode)

  return unless matches?(node, CONSTANT_NODES + CONSTANT_PATH_NODES + [Prism::ClassNode])

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.constant_path.location)
end

#on_class_variable_and_write_node_enter(node) ⇒ Object

: (Prism::ClassVariableAndWriteNode node) -> void



419
420
421
422
423
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 419

def on_class_variable_and_write_node_enter(node)
  return unless matches?(node, CLASS_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_class_variable_operator_write_node_enter(node) ⇒ Object

: (Prism::ClassVariableOperatorWriteNode node) -> void



412
413
414
415
416
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 412

def on_class_variable_operator_write_node_enter(node)
  return unless matches?(node, CLASS_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_class_variable_or_write_node_enter(node) ⇒ Object

: (Prism::ClassVariableOrWriteNode node) -> void



405
406
407
408
409
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 405

def on_class_variable_or_write_node_enter(node)
  return unless matches?(node, CLASS_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_class_variable_read_node_enter(node) ⇒ Object

: (Prism::ClassVariableReadNode node) -> void



291
292
293
294
295
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 291

def on_class_variable_read_node_enter(node)
  return unless matches?(node, CLASS_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::READ, node.location)
end

#on_class_variable_target_node_enter(node) ⇒ Object

: (Prism::ClassVariableTargetNode node) -> void



217
218
219
220
221
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 217

def on_class_variable_target_node_enter(node)
  return unless matches?(node, CLASS_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
end

#on_class_variable_write_node_enter(node) ⇒ Object

: (Prism::ClassVariableWriteNode node) -> void



398
399
400
401
402
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 398

def on_class_variable_write_node_enter(node)
  return unless matches?(node, CLASS_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_constant_and_write_node_enter(node) ⇒ Object

: (Prism::ConstantAndWriteNode node) -> void



475
476
477
478
479
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 475

def on_constant_and_write_node_enter(node)
  return unless matches?(node, CONSTANT_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_constant_operator_write_node_enter(node) ⇒ Object

: (Prism::ConstantOperatorWriteNode node) -> void



440
441
442
443
444
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 440

def on_constant_operator_write_node_enter(node)
  return unless matches?(node, CONSTANT_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_constant_or_write_node_enter(node) ⇒ Object

: (Prism::ConstantOrWriteNode node) -> void



433
434
435
436
437
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 433

def on_constant_or_write_node_enter(node)
  return unless matches?(node, CONSTANT_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_constant_path_and_write_node_enter(node) ⇒ Object

: (Prism::ConstantPathAndWriteNode node) -> void



319
320
321
322
323
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 319

def on_constant_path_and_write_node_enter(node)
  return unless matches?(node, CONSTANT_PATH_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.target.location)
end

#on_constant_path_node_enter(node) ⇒ Object

: (Prism::ConstantPathNode node) -> void



270
271
272
273
274
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 270

def on_constant_path_node_enter(node)
  return unless matches?(node, CONSTANT_PATH_NODES)

  add_highlight(Constant::DocumentHighlightKind::READ, node.name_loc)
end

#on_constant_path_operator_write_node_enter(node) ⇒ Object

: (Prism::ConstantPathOperatorWriteNode node) -> void



326
327
328
329
330
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 326

def on_constant_path_operator_write_node_enter(node)
  return unless matches?(node, CONSTANT_PATH_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.target.location)
end

#on_constant_path_or_write_node_enter(node) ⇒ Object

: (Prism::ConstantPathOrWriteNode node) -> void



312
313
314
315
316
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 312

def on_constant_path_or_write_node_enter(node)
  return unless matches?(node, CONSTANT_PATH_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.target.location)
end

#on_constant_path_target_node_enter(node) ⇒ Object

: (Prism::ConstantPathTargetNode node) -> void



203
204
205
206
207
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 203

def on_constant_path_target_node_enter(node)
  return unless matches?(node, CONSTANT_PATH_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
end

#on_constant_path_write_node_enter(node) ⇒ Object

: (Prism::ConstantPathWriteNode node) -> void



305
306
307
308
309
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 305

def on_constant_path_write_node_enter(node)
  return unless matches?(node, CONSTANT_PATH_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.target.location)
end

#on_constant_read_node_enter(node) ⇒ Object

: (Prism::ConstantReadNode node) -> void



277
278
279
280
281
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 277

def on_constant_read_node_enter(node)
  return unless matches?(node, CONSTANT_NODES)

  add_highlight(Constant::DocumentHighlightKind::READ, node.location)
end

#on_constant_target_node_enter(node) ⇒ Object

: (Prism::ConstantTargetNode node) -> void



210
211
212
213
214
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 210

def on_constant_target_node_enter(node)
  return unless matches?(node, CONSTANT_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
end

#on_constant_write_node_enter(node) ⇒ Object

: (Prism::ConstantWriteNode node) -> void



426
427
428
429
430
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 426

def on_constant_write_node_enter(node)
  return unless matches?(node, CONSTANT_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_def_node_enter(node) ⇒ Object

: (Prism::DefNode node) -> void



180
181
182
183
184
185
186
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 180

def on_def_node_enter(node)
  add_matching_end_highlights(node.def_keyword_loc, node.end_keyword_loc) if @target.is_a?(Prism::DefNode)

  return unless matches?(node, [Prism::CallNode, Prism::DefNode])

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_for_node_enter(node) ⇒ Object

: (Prism::ForNode node) -> void



538
539
540
541
542
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 538

def on_for_node_enter(node)
  return unless @target.is_a?(Prism::ForNode)

  add_matching_end_highlights(node.for_keyword_loc, node.end_keyword_loc)
end

#on_global_variable_and_write_node_enter(node) ⇒ Object

: (Prism::GlobalVariableAndWriteNode node) -> void



496
497
498
499
500
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 496

def on_global_variable_and_write_node_enter(node)
  return unless matches?(node, GLOBAL_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_global_variable_operator_write_node_enter(node) ⇒ Object

: (Prism::GlobalVariableOperatorWriteNode node) -> void



503
504
505
506
507
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 503

def on_global_variable_operator_write_node_enter(node)
  return unless matches?(node, GLOBAL_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_global_variable_or_write_node_enter(node) ⇒ Object

: (Prism::GlobalVariableOrWriteNode node) -> void



489
490
491
492
493
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 489

def on_global_variable_or_write_node_enter(node)
  return unless matches?(node, GLOBAL_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_global_variable_read_node_enter(node) ⇒ Object

: (Prism::GlobalVariableReadNode node) -> void



298
299
300
301
302
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 298

def on_global_variable_read_node_enter(node)
  return unless matches?(node, GLOBAL_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::READ, node.location)
end

#on_global_variable_target_node_enter(node) ⇒ Object

: (Prism::GlobalVariableTargetNode node) -> void



189
190
191
192
193
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 189

def on_global_variable_target_node_enter(node)
  return unless matches?(node, GLOBAL_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
end

#on_global_variable_write_node_enter(node) ⇒ Object

: (Prism::GlobalVariableWriteNode node) -> void



482
483
484
485
486
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 482

def on_global_variable_write_node_enter(node)
  return unless matches?(node, GLOBAL_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_if_node_enter(node) ⇒ Object

: (Prism::IfNode node) -> void



545
546
547
548
549
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 545

def on_if_node_enter(node)
  return unless @target.is_a?(Prism::IfNode)

  add_matching_end_highlights(node.if_keyword_loc, node.end_keyword_loc)
end

#on_instance_variable_and_write_node_enter(node) ⇒ Object

: (Prism::InstanceVariableAndWriteNode node) -> void



461
462
463
464
465
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 461

def on_instance_variable_and_write_node_enter(node)
  return unless matches?(node, INSTANCE_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_instance_variable_operator_write_node_enter(node) ⇒ Object

: (Prism::InstanceVariableOperatorWriteNode node) -> void



468
469
470
471
472
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 468

def on_instance_variable_operator_write_node_enter(node)
  return unless matches?(node, INSTANCE_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_instance_variable_or_write_node_enter(node) ⇒ Object

: (Prism::InstanceVariableOrWriteNode node) -> void



454
455
456
457
458
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 454

def on_instance_variable_or_write_node_enter(node)
  return unless matches?(node, INSTANCE_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_instance_variable_read_node_enter(node) ⇒ Object

: (Prism::InstanceVariableReadNode node) -> void



284
285
286
287
288
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 284

def on_instance_variable_read_node_enter(node)
  return unless matches?(node, INSTANCE_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::READ, node.location)
end

#on_instance_variable_target_node_enter(node) ⇒ Object

: (Prism::InstanceVariableTargetNode node) -> void



196
197
198
199
200
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 196

def on_instance_variable_target_node_enter(node)
  return unless matches?(node, INSTANCE_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
end

#on_instance_variable_write_node_enter(node) ⇒ Object

: (Prism::InstanceVariableWriteNode node) -> void



447
448
449
450
451
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 447

def on_instance_variable_write_node_enter(node)
  return unless matches?(node, INSTANCE_VARIABLE_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_keyword_rest_parameter_node_enter(node) ⇒ Object

: (Prism::KeywordRestParameterNode node) -> void



369
370
371
372
373
374
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 369

def on_keyword_rest_parameter_node_enter(node)
  return unless matches?(node, LOCAL_NODES)

  name_loc = node.name_loc
  add_highlight(Constant::DocumentHighlightKind::WRITE, name_loc) if name_loc
end

#on_lambda_node_enter(node) ⇒ Object

: (Prism::LambdaNode node) -> void



566
567
568
569
570
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 566

def on_lambda_node_enter(node)
  return unless @target.is_a?(Prism::LambdaNode)

  add_matching_end_highlights(node.opening_loc, node.closing_loc)
end

#on_local_variable_and_write_node_enter(node) ⇒ Object

: (Prism::LocalVariableAndWriteNode node) -> void



377
378
379
380
381
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 377

def on_local_variable_and_write_node_enter(node)
  return unless matches?(node, LOCAL_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_local_variable_operator_write_node_enter(node) ⇒ Object

: (Prism::LocalVariableOperatorWriteNode node) -> void



384
385
386
387
388
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 384

def on_local_variable_operator_write_node_enter(node)
  return unless matches?(node, LOCAL_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_local_variable_or_write_node_enter(node) ⇒ Object

: (Prism::LocalVariableOrWriteNode node) -> void



391
392
393
394
395
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 391

def on_local_variable_or_write_node_enter(node)
  return unless matches?(node, LOCAL_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_local_variable_read_node_enter(node) ⇒ Object

: (Prism::LocalVariableReadNode node) -> void



263
264
265
266
267
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 263

def on_local_variable_read_node_enter(node)
  return unless matches?(node, LOCAL_NODES)

  add_highlight(Constant::DocumentHighlightKind::READ, node.location)
end

#on_local_variable_target_node_enter(node) ⇒ Object

: (Prism::LocalVariableTargetNode node) -> void



224
225
226
227
228
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 224

def on_local_variable_target_node_enter(node)
  return unless matches?(node, LOCAL_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
end

#on_local_variable_write_node_enter(node) ⇒ Object

: (Prism::LocalVariableWriteNode node) -> void



333
334
335
336
337
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 333

def on_local_variable_write_node_enter(node)
  return unless matches?(node, LOCAL_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_module_node_enter(node) ⇒ Object

: (Prism::ModuleNode node) -> void



254
255
256
257
258
259
260
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 254

def on_module_node_enter(node)
  add_matching_end_highlights(node.module_keyword_loc, node.end_keyword_loc) if @target.is_a?(Prism::ModuleNode)

  return unless matches?(node, CONSTANT_NODES + CONSTANT_PATH_NODES + [Prism::ModuleNode])

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.constant_path.location)
end

#on_optional_keyword_parameter_node_enter(node) ⇒ Object

: (Prism::OptionalKeywordParameterNode node) -> void



347
348
349
350
351
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 347

def on_optional_keyword_parameter_node_enter(node)
  return unless matches?(node, LOCAL_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_optional_parameter_node_enter(node) ⇒ Object

: (Prism::OptionalParameterNode node) -> void



362
363
364
365
366
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 362

def on_optional_parameter_node_enter(node)
  return unless matches?(node, LOCAL_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_required_keyword_parameter_node_enter(node) ⇒ Object

: (Prism::RequiredKeywordParameterNode node) -> void



340
341
342
343
344
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 340

def on_required_keyword_parameter_node_enter(node)
  return unless matches?(node, LOCAL_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
end

#on_required_parameter_node_enter(node) ⇒ Object

: (Prism::RequiredParameterNode node) -> void



238
239
240
241
242
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 238

def on_required_parameter_node_enter(node)
  return unless matches?(node, LOCAL_NODES)

  add_highlight(Constant::DocumentHighlightKind::WRITE, node.location)
end

#on_rest_parameter_node_enter(node) ⇒ Object

: (Prism::RestParameterNode node) -> void



354
355
356
357
358
359
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 354

def on_rest_parameter_node_enter(node)
  return unless matches?(node, LOCAL_NODES)

  name_loc = node.name_loc
  add_highlight(Constant::DocumentHighlightKind::WRITE, name_loc) if name_loc
end

#on_singleton_class_node_enter(node) ⇒ Object

: (Prism::SingletonClassNode node) -> void



510
511
512
513
514
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 510

def on_singleton_class_node_enter(node)
  return unless @target.is_a?(Prism::SingletonClassNode)

  add_matching_end_highlights(node.class_keyword_loc, node.end_keyword_loc)
end

#on_unless_node_enter(node) ⇒ Object

: (Prism::UnlessNode node) -> void



552
553
554
555
556
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 552

def on_unless_node_enter(node)
  return unless @target.is_a?(Prism::UnlessNode)

  add_matching_end_highlights(node.keyword_loc, node.end_keyword_loc)
end

#on_until_node_enter(node) ⇒ Object

: (Prism::UntilNode node) -> void



531
532
533
534
535
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 531

def on_until_node_enter(node)
  return unless @target.is_a?(Prism::UntilNode)

  add_matching_end_highlights(node.keyword_loc, node.closing_loc)
end

#on_while_node_enter(node) ⇒ Object

: (Prism::WhileNode node) -> void



524
525
526
527
528
# File 'lib/ruby_lsp/listeners/document_highlight.rb', line 524

def on_while_node_enter(node)
  return unless @target.is_a?(Prism::WhileNode)

  add_matching_end_highlights(node.keyword_loc, node.closing_loc)
end