ruby-lsp 0.23.10 → 0.23.12
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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/VERSION +1 -1
- data/exe/ruby-lsp-launcher +12 -11
- data/lib/rubocop/cop/ruby_lsp/use_register_with_handler_method.rb +3 -5
- data/lib/ruby_indexer/lib/ruby_indexer/configuration.rb +52 -77
- data/lib/ruby_indexer/lib/ruby_indexer/declaration_listener.rb +61 -144
- data/lib/ruby_indexer/lib/ruby_indexer/enhancement.rb +8 -6
- data/lib/ruby_indexer/lib/ruby_indexer/entry.rb +74 -183
- data/lib/ruby_indexer/lib/ruby_indexer/index.rb +55 -181
- data/lib/ruby_indexer/lib/ruby_indexer/location.rb +4 -27
- data/lib/ruby_indexer/lib/ruby_indexer/prefix_tree.rb +12 -14
- data/lib/ruby_indexer/lib/ruby_indexer/rbs_indexer.rb +21 -44
- data/lib/ruby_indexer/lib/ruby_indexer/reference_finder.rb +40 -58
- data/lib/ruby_indexer/lib/ruby_indexer/uri.rb +9 -16
- data/lib/ruby_indexer/lib/ruby_indexer/visibility_scope.rb +5 -9
- data/lib/ruby_indexer/test/classes_and_modules_test.rb +75 -0
- data/lib/ruby_indexer/test/configuration_test.rb +32 -2
- data/lib/ruby_indexer/test/index_test.rb +21 -0
- data/lib/ruby_indexer/test/method_test.rb +2 -2
- data/lib/ruby_lsp/addon.rb +32 -67
- data/lib/ruby_lsp/base_server.rb +12 -11
- data/lib/ruby_lsp/client_capabilities.rb +4 -6
- data/lib/ruby_lsp/document.rb +21 -32
- data/lib/ruby_lsp/erb_document.rb +17 -27
- data/lib/ruby_lsp/global_state.rb +30 -32
- data/lib/ruby_lsp/internal.rb +6 -0
- data/lib/ruby_lsp/listeners/code_lens.rb +21 -39
- data/lib/ruby_lsp/listeners/completion.rb +34 -53
- data/lib/ruby_lsp/listeners/definition.rb +35 -49
- data/lib/ruby_lsp/listeners/document_highlight.rb +60 -69
- data/lib/ruby_lsp/listeners/document_link.rb +9 -19
- data/lib/ruby_lsp/listeners/document_symbol.rb +34 -48
- data/lib/ruby_lsp/listeners/folding_ranges.rb +31 -38
- data/lib/ruby_lsp/listeners/hover.rb +37 -47
- data/lib/ruby_lsp/listeners/inlay_hints.rb +3 -10
- data/lib/ruby_lsp/listeners/semantic_highlighting.rb +29 -35
- data/lib/ruby_lsp/listeners/signature_help.rb +4 -23
- data/lib/ruby_lsp/listeners/spec_style.rb +199 -0
- data/lib/ruby_lsp/listeners/test_style.rb +270 -0
- data/lib/ruby_lsp/node_context.rb +8 -35
- data/lib/ruby_lsp/rbs_document.rb +7 -5
- data/lib/ruby_lsp/requests/code_action_resolve.rb +10 -10
- data/lib/ruby_lsp/requests/code_actions.rb +5 -14
- data/lib/ruby_lsp/requests/code_lens.rb +4 -13
- data/lib/ruby_lsp/requests/completion.rb +4 -15
- data/lib/ruby_lsp/requests/completion_resolve.rb +4 -4
- data/lib/ruby_lsp/requests/definition.rb +4 -12
- data/lib/ruby_lsp/requests/diagnostics.rb +6 -9
- data/lib/ruby_lsp/requests/discover_tests.rb +74 -0
- data/lib/ruby_lsp/requests/document_highlight.rb +3 -11
- data/lib/ruby_lsp/requests/document_link.rb +4 -13
- data/lib/ruby_lsp/requests/document_symbol.rb +4 -7
- data/lib/ruby_lsp/requests/folding_ranges.rb +4 -7
- data/lib/ruby_lsp/requests/formatting.rb +4 -7
- data/lib/ruby_lsp/requests/go_to_relevant_file.rb +87 -0
- data/lib/ruby_lsp/requests/hover.rb +6 -16
- data/lib/ruby_lsp/requests/inlay_hints.rb +4 -13
- data/lib/ruby_lsp/requests/on_type_formatting.rb +17 -24
- data/lib/ruby_lsp/requests/prepare_rename.rb +3 -8
- data/lib/ruby_lsp/requests/prepare_type_hierarchy.rb +4 -13
- data/lib/ruby_lsp/requests/range_formatting.rb +3 -4
- data/lib/ruby_lsp/requests/references.rb +5 -35
- data/lib/ruby_lsp/requests/rename.rb +9 -35
- data/lib/ruby_lsp/requests/request.rb +5 -17
- data/lib/ruby_lsp/requests/selection_ranges.rb +3 -3
- data/lib/ruby_lsp/requests/semantic_highlighting.rb +6 -23
- data/lib/ruby_lsp/requests/show_syntax_tree.rb +4 -5
- data/lib/ruby_lsp/requests/signature_help.rb +6 -24
- data/lib/ruby_lsp/requests/support/annotation.rb +4 -10
- data/lib/ruby_lsp/requests/support/common.rb +12 -47
- data/lib/ruby_lsp/requests/support/rubocop_diagnostic.rb +12 -14
- data/lib/ruby_lsp/requests/support/rubocop_formatter.rb +7 -10
- data/lib/ruby_lsp/requests/support/rubocop_runner.rb +9 -15
- data/lib/ruby_lsp/requests/support/selection_range.rb +1 -3
- data/lib/ruby_lsp/requests/support/sorbet.rb +1 -7
- data/lib/ruby_lsp/requests/support/source_uri.rb +5 -16
- data/lib/ruby_lsp/requests/support/syntax_tree_formatter.rb +7 -10
- data/lib/ruby_lsp/requests/support/test_item.rb +60 -0
- data/lib/ruby_lsp/requests/type_hierarchy_supertypes.rb +4 -5
- data/lib/ruby_lsp/requests/workspace_symbol.rb +3 -3
- data/lib/ruby_lsp/response_builders/collection_response_builder.rb +4 -4
- data/lib/ruby_lsp/response_builders/document_symbol.rb +8 -11
- data/lib/ruby_lsp/response_builders/hover.rb +5 -5
- data/lib/ruby_lsp/response_builders/response_builder.rb +1 -1
- data/lib/ruby_lsp/response_builders/semantic_highlighting.rb +18 -40
- data/lib/ruby_lsp/response_builders/signature_help.rb +4 -5
- data/lib/ruby_lsp/response_builders/test_collection.rb +34 -0
- data/lib/ruby_lsp/ruby_document.rb +15 -40
- data/lib/ruby_lsp/ruby_lsp_reporter_plugin.rb +106 -0
- data/lib/ruby_lsp/scope.rb +6 -10
- data/lib/ruby_lsp/server.rb +169 -72
- data/lib/ruby_lsp/setup_bundler.rb +25 -17
- data/lib/ruby_lsp/store.rb +12 -28
- data/lib/ruby_lsp/test_helper.rb +3 -12
- data/lib/ruby_lsp/test_reporter.rb +71 -0
- data/lib/ruby_lsp/test_unit_test_runner.rb +96 -0
- data/lib/ruby_lsp/type_inferrer.rb +9 -13
- data/lib/ruby_lsp/utils.rb +27 -65
- metadata +12 -3
@@ -4,7 +4,6 @@
|
|
4
4
|
module RubyLsp
|
5
5
|
module Listeners
|
6
6
|
class Completion
|
7
|
-
extend T::Sig
|
8
7
|
include Requests::Support::Common
|
9
8
|
|
10
9
|
KEYWORDS = [
|
@@ -51,17 +50,7 @@ module RubyLsp
|
|
51
50
|
"__LINE__",
|
52
51
|
].freeze
|
53
52
|
|
54
|
-
|
55
|
-
params(
|
56
|
-
response_builder: ResponseBuilders::CollectionResponseBuilder[Interface::CompletionItem],
|
57
|
-
global_state: GlobalState,
|
58
|
-
node_context: NodeContext,
|
59
|
-
sorbet_level: RubyDocument::SorbetLevel,
|
60
|
-
dispatcher: Prism::Dispatcher,
|
61
|
-
uri: URI::Generic,
|
62
|
-
trigger_character: T.nilable(String),
|
63
|
-
).void
|
64
|
-
end
|
53
|
+
#: (ResponseBuilders::CollectionResponseBuilder[Interface::CompletionItem] response_builder, GlobalState global_state, NodeContext node_context, RubyDocument::SorbetLevel sorbet_level, Prism::Dispatcher dispatcher, URI::Generic uri, String? trigger_character) -> void
|
65
54
|
def initialize( # rubocop:disable Metrics/ParameterLists
|
66
55
|
response_builder,
|
67
56
|
global_state,
|
@@ -107,7 +96,7 @@ module RubyLsp
|
|
107
96
|
end
|
108
97
|
|
109
98
|
# Handle completion on regular constant references (e.g. `Bar`)
|
110
|
-
|
99
|
+
#: (Prism::ConstantReadNode node) -> void
|
111
100
|
def on_constant_read_node_enter(node)
|
112
101
|
# The only scenario where Sorbet doesn't provide constant completion is on ignored files. Even if the file has
|
113
102
|
# no sigil, Sorbet will still provide completion for constants
|
@@ -131,7 +120,7 @@ module RubyLsp
|
|
131
120
|
end
|
132
121
|
|
133
122
|
# Handle completion on namespaced constant references (e.g. `Foo::Bar`)
|
134
|
-
|
123
|
+
#: (Prism::ConstantPathNode node) -> void
|
135
124
|
def on_constant_path_node_enter(node)
|
136
125
|
# The only scenario where Sorbet doesn't provide constant completion is on ignored files. Even if the file has
|
137
126
|
# no sigil, Sorbet will still provide completion for constants
|
@@ -149,7 +138,7 @@ module RubyLsp
|
|
149
138
|
constant_path_completion(name, range_from_location(node.location))
|
150
139
|
end
|
151
140
|
|
152
|
-
|
141
|
+
#: (Prism::CallNode node) -> void
|
153
142
|
def on_call_node_enter(node)
|
154
143
|
# The only scenario where Sorbet doesn't provide constant completion is on ignored files. Even if the file has
|
155
144
|
# no sigil, Sorbet will still provide completion for constants
|
@@ -193,99 +182,99 @@ module RubyLsp
|
|
193
182
|
end
|
194
183
|
end
|
195
184
|
|
196
|
-
|
185
|
+
#: (Prism::GlobalVariableAndWriteNode node) -> void
|
197
186
|
def on_global_variable_and_write_node_enter(node)
|
198
187
|
handle_global_variable_completion(node.name.to_s, node.name_loc)
|
199
188
|
end
|
200
189
|
|
201
|
-
|
190
|
+
#: (Prism::GlobalVariableOperatorWriteNode node) -> void
|
202
191
|
def on_global_variable_operator_write_node_enter(node)
|
203
192
|
handle_global_variable_completion(node.name.to_s, node.name_loc)
|
204
193
|
end
|
205
194
|
|
206
|
-
|
195
|
+
#: (Prism::GlobalVariableOrWriteNode node) -> void
|
207
196
|
def on_global_variable_or_write_node_enter(node)
|
208
197
|
handle_global_variable_completion(node.name.to_s, node.name_loc)
|
209
198
|
end
|
210
199
|
|
211
|
-
|
200
|
+
#: (Prism::GlobalVariableReadNode node) -> void
|
212
201
|
def on_global_variable_read_node_enter(node)
|
213
202
|
handle_global_variable_completion(node.name.to_s, node.location)
|
214
203
|
end
|
215
204
|
|
216
|
-
|
205
|
+
#: (Prism::GlobalVariableTargetNode node) -> void
|
217
206
|
def on_global_variable_target_node_enter(node)
|
218
207
|
handle_global_variable_completion(node.name.to_s, node.location)
|
219
208
|
end
|
220
209
|
|
221
|
-
|
210
|
+
#: (Prism::GlobalVariableWriteNode node) -> void
|
222
211
|
def on_global_variable_write_node_enter(node)
|
223
212
|
handle_global_variable_completion(node.name.to_s, node.name_loc)
|
224
213
|
end
|
225
214
|
|
226
|
-
|
215
|
+
#: (Prism::InstanceVariableReadNode node) -> void
|
227
216
|
def on_instance_variable_read_node_enter(node)
|
228
217
|
handle_instance_variable_completion(node.name.to_s, node.location)
|
229
218
|
end
|
230
219
|
|
231
|
-
|
220
|
+
#: (Prism::InstanceVariableWriteNode node) -> void
|
232
221
|
def on_instance_variable_write_node_enter(node)
|
233
222
|
handle_instance_variable_completion(node.name.to_s, node.name_loc)
|
234
223
|
end
|
235
224
|
|
236
|
-
|
225
|
+
#: (Prism::InstanceVariableAndWriteNode node) -> void
|
237
226
|
def on_instance_variable_and_write_node_enter(node)
|
238
227
|
handle_instance_variable_completion(node.name.to_s, node.name_loc)
|
239
228
|
end
|
240
229
|
|
241
|
-
|
230
|
+
#: (Prism::InstanceVariableOperatorWriteNode node) -> void
|
242
231
|
def on_instance_variable_operator_write_node_enter(node)
|
243
232
|
handle_instance_variable_completion(node.name.to_s, node.name_loc)
|
244
233
|
end
|
245
234
|
|
246
|
-
|
235
|
+
#: (Prism::InstanceVariableOrWriteNode node) -> void
|
247
236
|
def on_instance_variable_or_write_node_enter(node)
|
248
237
|
handle_instance_variable_completion(node.name.to_s, node.name_loc)
|
249
238
|
end
|
250
239
|
|
251
|
-
|
240
|
+
#: (Prism::InstanceVariableTargetNode node) -> void
|
252
241
|
def on_instance_variable_target_node_enter(node)
|
253
242
|
handle_instance_variable_completion(node.name.to_s, node.location)
|
254
243
|
end
|
255
244
|
|
256
|
-
|
245
|
+
#: (Prism::ClassVariableAndWriteNode node) -> void
|
257
246
|
def on_class_variable_and_write_node_enter(node)
|
258
247
|
handle_class_variable_completion(node.name.to_s, node.name_loc)
|
259
248
|
end
|
260
249
|
|
261
|
-
|
250
|
+
#: (Prism::ClassVariableOperatorWriteNode node) -> void
|
262
251
|
def on_class_variable_operator_write_node_enter(node)
|
263
252
|
handle_class_variable_completion(node.name.to_s, node.name_loc)
|
264
253
|
end
|
265
254
|
|
266
|
-
|
255
|
+
#: (Prism::ClassVariableOrWriteNode node) -> void
|
267
256
|
def on_class_variable_or_write_node_enter(node)
|
268
257
|
handle_class_variable_completion(node.name.to_s, node.name_loc)
|
269
258
|
end
|
270
259
|
|
271
|
-
|
260
|
+
#: (Prism::ClassVariableTargetNode node) -> void
|
272
261
|
def on_class_variable_target_node_enter(node)
|
273
262
|
handle_class_variable_completion(node.name.to_s, node.location)
|
274
263
|
end
|
275
264
|
|
276
|
-
|
265
|
+
#: (Prism::ClassVariableReadNode node) -> void
|
277
266
|
def on_class_variable_read_node_enter(node)
|
278
267
|
handle_class_variable_completion(node.name.to_s, node.location)
|
279
268
|
end
|
280
269
|
|
281
|
-
|
270
|
+
#: (Prism::ClassVariableWriteNode node) -> void
|
282
271
|
def on_class_variable_write_node_enter(node)
|
283
272
|
handle_class_variable_completion(node.name.to_s, node.name_loc)
|
284
273
|
end
|
285
274
|
|
286
275
|
private
|
287
276
|
|
288
|
-
|
277
|
+
#: (String name, Interface::Range range) -> void
|
289
278
|
def constant_path_completion(name, range)
|
290
279
|
top_level_reference = if name.start_with?("::")
|
291
280
|
name = name.delete_prefix("::")
|
@@ -340,7 +329,7 @@ module RubyLsp
|
|
340
329
|
end
|
341
330
|
end
|
342
331
|
|
343
|
-
|
332
|
+
#: (String name, Prism::Location location) -> void
|
344
333
|
def handle_global_variable_completion(name, location)
|
345
334
|
candidates = @index.prefix_search(name)
|
346
335
|
|
@@ -363,7 +352,7 @@ module RubyLsp
|
|
363
352
|
end
|
364
353
|
end
|
365
354
|
|
366
|
-
|
355
|
+
#: (String name, Prism::Location location) -> void
|
367
356
|
def handle_class_variable_completion(name, location)
|
368
357
|
type = @type_inferrer.infer_receiver_type(@node_context)
|
369
358
|
return unless type
|
@@ -394,7 +383,7 @@ module RubyLsp
|
|
394
383
|
# If by any chance we haven't indexed the owner, then there's no way to find the right declaration
|
395
384
|
end
|
396
385
|
|
397
|
-
|
386
|
+
#: (String name, Prism::Location location) -> void
|
398
387
|
def handle_instance_variable_completion(name, location)
|
399
388
|
# Sorbet enforces that all instance variables be declared on typed strict or higher, which means it will be able
|
400
389
|
# to provide all features for them
|
@@ -428,7 +417,7 @@ module RubyLsp
|
|
428
417
|
# If by any chance we haven't indexed the owner, then there's no way to find the right declaration
|
429
418
|
end
|
430
419
|
|
431
|
-
|
420
|
+
#: (Prism::CallNode node) -> void
|
432
421
|
def complete_require(node)
|
433
422
|
arguments_node = node.arguments
|
434
423
|
return unless arguments_node
|
@@ -444,7 +433,7 @@ module RubyLsp
|
|
444
433
|
end
|
445
434
|
end
|
446
435
|
|
447
|
-
|
436
|
+
#: (Prism::CallNode node) -> void
|
448
437
|
def complete_require_relative(node)
|
449
438
|
arguments_node = node.arguments
|
450
439
|
return unless arguments_node
|
@@ -476,7 +465,7 @@ module RubyLsp
|
|
476
465
|
# might fail with EPERM
|
477
466
|
end
|
478
467
|
|
479
|
-
|
468
|
+
#: (Prism::CallNode node, String name) -> void
|
480
469
|
def complete_methods(node, name)
|
481
470
|
# If the node has a receiver, then we don't need to provide local nor keyword completions. Sorbet can provide
|
482
471
|
# local and keyword completion for any file with a Sorbet level of true or higher
|
@@ -540,7 +529,7 @@ module RubyLsp
|
|
540
529
|
# We have not indexed this namespace, so we can't provide any completions
|
541
530
|
end
|
542
531
|
|
543
|
-
|
532
|
+
#: (Prism::CallNode node, String name) -> void
|
544
533
|
def add_local_completions(node, name)
|
545
534
|
range = range_from_location(T.must(node.message_loc))
|
546
535
|
|
@@ -560,7 +549,7 @@ module RubyLsp
|
|
560
549
|
end
|
561
550
|
end
|
562
551
|
|
563
|
-
|
552
|
+
#: (Prism::CallNode node, String name) -> void
|
564
553
|
def add_keyword_completions(node, name)
|
565
554
|
range = range_from_location(T.must(node.message_loc))
|
566
555
|
|
@@ -578,7 +567,7 @@ module RubyLsp
|
|
578
567
|
end
|
579
568
|
end
|
580
569
|
|
581
|
-
|
570
|
+
#: (String label, Prism::StringNode node) -> Interface::CompletionItem
|
582
571
|
def build_completion(label, node)
|
583
572
|
# We should use the content location as we only replace the content and not the delimiters of the string
|
584
573
|
loc = node.content_loc
|
@@ -593,15 +582,7 @@ module RubyLsp
|
|
593
582
|
)
|
594
583
|
end
|
595
584
|
|
596
|
-
|
597
|
-
params(
|
598
|
-
real_name: String,
|
599
|
-
incomplete_name: String,
|
600
|
-
range: Interface::Range,
|
601
|
-
entries: T::Array[RubyIndexer::Entry],
|
602
|
-
top_level: T::Boolean,
|
603
|
-
).returns(Interface::CompletionItem)
|
604
|
-
end
|
585
|
+
#: (String real_name, String incomplete_name, Interface::Range range, Array[RubyIndexer::Entry] entries, bool top_level) -> Interface::CompletionItem
|
605
586
|
def build_entry_completion(real_name, incomplete_name, range, entries, top_level)
|
606
587
|
first_entry = T.must(entries.first)
|
607
588
|
kind = case first_entry
|
@@ -690,7 +671,7 @@ module RubyLsp
|
|
690
671
|
# B
|
691
672
|
# end
|
692
673
|
# ```
|
693
|
-
|
674
|
+
#: (String entry_name) -> bool
|
694
675
|
def top_level?(entry_name)
|
695
676
|
nesting = @node_context.nesting
|
696
677
|
nesting.length.downto(0) do |i|
|
@@ -4,25 +4,11 @@
|
|
4
4
|
module RubyLsp
|
5
5
|
module Listeners
|
6
6
|
class Definition
|
7
|
-
extend T::Sig
|
8
7
|
include Requests::Support::Common
|
9
8
|
|
10
9
|
MAX_NUMBER_OF_DEFINITION_CANDIDATES_WITHOUT_RECEIVER = 10
|
11
10
|
|
12
|
-
|
13
|
-
params(
|
14
|
-
response_builder: ResponseBuilders::CollectionResponseBuilder[T.any(
|
15
|
-
Interface::Location,
|
16
|
-
Interface::LocationLink,
|
17
|
-
)],
|
18
|
-
global_state: GlobalState,
|
19
|
-
language_id: Document::LanguageId,
|
20
|
-
uri: URI::Generic,
|
21
|
-
node_context: NodeContext,
|
22
|
-
dispatcher: Prism::Dispatcher,
|
23
|
-
sorbet_level: RubyDocument::SorbetLevel,
|
24
|
-
).void
|
25
|
-
end
|
11
|
+
#: (ResponseBuilders::CollectionResponseBuilder[(Interface::Location | Interface::LocationLink)] response_builder, GlobalState global_state, Document::LanguageId language_id, URI::Generic uri, NodeContext node_context, Prism::Dispatcher dispatcher, RubyDocument::SorbetLevel sorbet_level) -> void
|
26
12
|
def initialize(response_builder, global_state, language_id, uri, node_context, dispatcher, sorbet_level) # rubocop:disable Metrics/ParameterLists
|
27
13
|
@response_builder = response_builder
|
28
14
|
@global_state = global_state
|
@@ -64,7 +50,7 @@ module RubyLsp
|
|
64
50
|
)
|
65
51
|
end
|
66
52
|
|
67
|
-
|
53
|
+
#: (Prism::CallNode node) -> void
|
68
54
|
def on_call_node_enter(node)
|
69
55
|
# Sorbet can handle go to definition for methods invoked on self on typed true or higher
|
70
56
|
return if sorbet_level_true_or_higher?(@sorbet_level) && self_receiver?(node)
|
@@ -83,7 +69,7 @@ module RubyLsp
|
|
83
69
|
handle_method_definition(message, inferrer_receiver_type)
|
84
70
|
end
|
85
71
|
|
86
|
-
|
72
|
+
#: (Prism::StringNode node) -> void
|
87
73
|
def on_string_node_enter(node)
|
88
74
|
enclosing_call = @node_context.call_node
|
89
75
|
return unless enclosing_call
|
@@ -94,7 +80,7 @@ module RubyLsp
|
|
94
80
|
handle_require_definition(node, name)
|
95
81
|
end
|
96
82
|
|
97
|
-
|
83
|
+
#: (Prism::SymbolNode node) -> void
|
98
84
|
def on_symbol_node_enter(node)
|
99
85
|
enclosing_call = @node_context.call_node
|
100
86
|
return unless enclosing_call
|
@@ -105,7 +91,7 @@ module RubyLsp
|
|
105
91
|
handle_autoload_definition(enclosing_call)
|
106
92
|
end
|
107
93
|
|
108
|
-
|
94
|
+
#: (Prism::BlockArgumentNode node) -> void
|
109
95
|
def on_block_argument_node_enter(node)
|
110
96
|
expression = node.expression
|
111
97
|
return unless expression.is_a?(Prism::SymbolNode)
|
@@ -116,7 +102,7 @@ module RubyLsp
|
|
116
102
|
handle_method_definition(value, nil)
|
117
103
|
end
|
118
104
|
|
119
|
-
|
105
|
+
#: (Prism::ConstantPathNode node) -> void
|
120
106
|
def on_constant_path_node_enter(node)
|
121
107
|
name = RubyIndexer::Index.constant_name(node)
|
122
108
|
return if name.nil?
|
@@ -124,7 +110,7 @@ module RubyLsp
|
|
124
110
|
find_in_index(name)
|
125
111
|
end
|
126
112
|
|
127
|
-
|
113
|
+
#: (Prism::ConstantReadNode node) -> void
|
128
114
|
def on_constant_read_node_enter(node)
|
129
115
|
name = RubyIndexer::Index.constant_name(node)
|
130
116
|
return if name.nil?
|
@@ -132,109 +118,109 @@ module RubyLsp
|
|
132
118
|
find_in_index(name)
|
133
119
|
end
|
134
120
|
|
135
|
-
|
121
|
+
#: (Prism::GlobalVariableAndWriteNode node) -> void
|
136
122
|
def on_global_variable_and_write_node_enter(node)
|
137
123
|
handle_global_variable_definition(node.name.to_s)
|
138
124
|
end
|
139
125
|
|
140
|
-
|
126
|
+
#: (Prism::GlobalVariableOperatorWriteNode node) -> void
|
141
127
|
def on_global_variable_operator_write_node_enter(node)
|
142
128
|
handle_global_variable_definition(node.name.to_s)
|
143
129
|
end
|
144
130
|
|
145
|
-
|
131
|
+
#: (Prism::GlobalVariableOrWriteNode node) -> void
|
146
132
|
def on_global_variable_or_write_node_enter(node)
|
147
133
|
handle_global_variable_definition(node.name.to_s)
|
148
134
|
end
|
149
135
|
|
150
|
-
|
136
|
+
#: (Prism::GlobalVariableReadNode node) -> void
|
151
137
|
def on_global_variable_read_node_enter(node)
|
152
138
|
handle_global_variable_definition(node.name.to_s)
|
153
139
|
end
|
154
140
|
|
155
|
-
|
141
|
+
#: (Prism::GlobalVariableTargetNode node) -> void
|
156
142
|
def on_global_variable_target_node_enter(node)
|
157
143
|
handle_global_variable_definition(node.name.to_s)
|
158
144
|
end
|
159
145
|
|
160
|
-
|
146
|
+
#: (Prism::GlobalVariableWriteNode node) -> void
|
161
147
|
def on_global_variable_write_node_enter(node)
|
162
148
|
handle_global_variable_definition(node.name.to_s)
|
163
149
|
end
|
164
150
|
|
165
|
-
|
151
|
+
#: (Prism::InstanceVariableReadNode node) -> void
|
166
152
|
def on_instance_variable_read_node_enter(node)
|
167
153
|
handle_instance_variable_definition(node.name.to_s)
|
168
154
|
end
|
169
155
|
|
170
|
-
|
156
|
+
#: (Prism::InstanceVariableWriteNode node) -> void
|
171
157
|
def on_instance_variable_write_node_enter(node)
|
172
158
|
handle_instance_variable_definition(node.name.to_s)
|
173
159
|
end
|
174
160
|
|
175
|
-
|
161
|
+
#: (Prism::InstanceVariableAndWriteNode node) -> void
|
176
162
|
def on_instance_variable_and_write_node_enter(node)
|
177
163
|
handle_instance_variable_definition(node.name.to_s)
|
178
164
|
end
|
179
165
|
|
180
|
-
|
166
|
+
#: (Prism::InstanceVariableOperatorWriteNode node) -> void
|
181
167
|
def on_instance_variable_operator_write_node_enter(node)
|
182
168
|
handle_instance_variable_definition(node.name.to_s)
|
183
169
|
end
|
184
170
|
|
185
|
-
|
171
|
+
#: (Prism::InstanceVariableOrWriteNode node) -> void
|
186
172
|
def on_instance_variable_or_write_node_enter(node)
|
187
173
|
handle_instance_variable_definition(node.name.to_s)
|
188
174
|
end
|
189
175
|
|
190
|
-
|
176
|
+
#: (Prism::InstanceVariableTargetNode node) -> void
|
191
177
|
def on_instance_variable_target_node_enter(node)
|
192
178
|
handle_instance_variable_definition(node.name.to_s)
|
193
179
|
end
|
194
180
|
|
195
|
-
|
181
|
+
#: (Prism::SuperNode node) -> void
|
196
182
|
def on_super_node_enter(node)
|
197
183
|
handle_super_node_definition
|
198
184
|
end
|
199
185
|
|
200
|
-
|
186
|
+
#: (Prism::ForwardingSuperNode node) -> void
|
201
187
|
def on_forwarding_super_node_enter(node)
|
202
188
|
handle_super_node_definition
|
203
189
|
end
|
204
190
|
|
205
|
-
|
191
|
+
#: (Prism::ClassVariableAndWriteNode node) -> void
|
206
192
|
def on_class_variable_and_write_node_enter(node)
|
207
193
|
handle_class_variable_definition(node.name.to_s)
|
208
194
|
end
|
209
195
|
|
210
|
-
|
196
|
+
#: (Prism::ClassVariableOperatorWriteNode node) -> void
|
211
197
|
def on_class_variable_operator_write_node_enter(node)
|
212
198
|
handle_class_variable_definition(node.name.to_s)
|
213
199
|
end
|
214
200
|
|
215
|
-
|
201
|
+
#: (Prism::ClassVariableOrWriteNode node) -> void
|
216
202
|
def on_class_variable_or_write_node_enter(node)
|
217
203
|
handle_class_variable_definition(node.name.to_s)
|
218
204
|
end
|
219
205
|
|
220
|
-
|
206
|
+
#: (Prism::ClassVariableTargetNode node) -> void
|
221
207
|
def on_class_variable_target_node_enter(node)
|
222
208
|
handle_class_variable_definition(node.name.to_s)
|
223
209
|
end
|
224
210
|
|
225
|
-
|
211
|
+
#: (Prism::ClassVariableReadNode node) -> void
|
226
212
|
def on_class_variable_read_node_enter(node)
|
227
213
|
handle_class_variable_definition(node.name.to_s)
|
228
214
|
end
|
229
215
|
|
230
|
-
|
216
|
+
#: (Prism::ClassVariableWriteNode node) -> void
|
231
217
|
def on_class_variable_write_node_enter(node)
|
232
218
|
handle_class_variable_definition(node.name.to_s)
|
233
219
|
end
|
234
220
|
|
235
221
|
private
|
236
222
|
|
237
|
-
|
223
|
+
#: -> void
|
238
224
|
def handle_super_node_definition
|
239
225
|
# Sorbet can handle super hover on typed true or higher
|
240
226
|
return if sorbet_level_true_or_higher?(@sorbet_level)
|
@@ -249,7 +235,7 @@ module RubyLsp
|
|
249
235
|
)
|
250
236
|
end
|
251
237
|
|
252
|
-
|
238
|
+
#: (String name) -> void
|
253
239
|
def handle_global_variable_definition(name)
|
254
240
|
entries = @index[name]
|
255
241
|
|
@@ -268,7 +254,7 @@ module RubyLsp
|
|
268
254
|
end
|
269
255
|
end
|
270
256
|
|
271
|
-
|
257
|
+
#: (String name) -> void
|
272
258
|
def handle_class_variable_definition(name)
|
273
259
|
type = @type_inferrer.infer_receiver_type(@node_context)
|
274
260
|
return unless type
|
@@ -286,7 +272,7 @@ module RubyLsp
|
|
286
272
|
# If by any chance we haven't indexed the owner, then there's no way to find the right declaration
|
287
273
|
end
|
288
274
|
|
289
|
-
|
275
|
+
#: (String name) -> void
|
290
276
|
def handle_instance_variable_definition(name)
|
291
277
|
# Sorbet enforces that all instance variables be declared on typed strict or higher, which means it will be able
|
292
278
|
# to provide all features for them
|
@@ -313,7 +299,7 @@ module RubyLsp
|
|
313
299
|
# If by any chance we haven't indexed the owner, then there's no way to find the right declaration
|
314
300
|
end
|
315
301
|
|
316
|
-
|
302
|
+
#: (String message, TypeInferrer::Type? receiver_type, ?inherited_only: bool) -> void
|
317
303
|
def handle_method_definition(message, receiver_type, inherited_only: false)
|
318
304
|
methods = if receiver_type
|
319
305
|
@index.resolve_method(message, receiver_type.name, inherited_only: inherited_only)
|
@@ -341,7 +327,7 @@ module RubyLsp
|
|
341
327
|
end
|
342
328
|
end
|
343
329
|
|
344
|
-
|
330
|
+
#: (Prism::StringNode node, Symbol message) -> void
|
345
331
|
def handle_require_definition(node, message)
|
346
332
|
case message
|
347
333
|
when :require
|
@@ -378,7 +364,7 @@ module RubyLsp
|
|
378
364
|
end
|
379
365
|
end
|
380
366
|
|
381
|
-
|
367
|
+
#: (Prism::CallNode node) -> void
|
382
368
|
def handle_autoload_definition(node)
|
383
369
|
argument = node.arguments&.arguments&.first
|
384
370
|
return unless argument.is_a?(Prism::SymbolNode)
|
@@ -389,7 +375,7 @@ module RubyLsp
|
|
389
375
|
find_in_index(constant_name)
|
390
376
|
end
|
391
377
|
|
392
|
-
|
378
|
+
#: (String value) -> void
|
393
379
|
def find_in_index(value)
|
394
380
|
entries = @index.resolve(value, @node_context.nesting)
|
395
381
|
return unless entries
|