ruby-lsp 0.23.11 → 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 +73 -182
- data/lib/ruby_indexer/lib/ruby_indexer/index.rb +48 -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/configuration_test.rb +32 -2
- 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 +10 -10
- 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 +2 -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 +136 -30
- 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 +15 -3
- 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 -49
- 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 +14 -13
- 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 +5 -9
- 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 +125 -74
- data/lib/ruby_lsp/setup_bundler.rb +22 -15
- 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 +8 -3
@@ -4,7 +4,6 @@
|
|
4
4
|
module RubyLsp
|
5
5
|
module Listeners
|
6
6
|
class Hover
|
7
|
-
extend T::Sig
|
8
7
|
include Requests::Support::Common
|
9
8
|
|
10
9
|
ALLOWED_TARGETS = T.let(
|
@@ -49,16 +48,7 @@ module RubyLsp
|
|
49
48
|
T::Array[String],
|
50
49
|
)
|
51
50
|
|
52
|
-
|
53
|
-
params(
|
54
|
-
response_builder: ResponseBuilders::Hover,
|
55
|
-
global_state: GlobalState,
|
56
|
-
uri: URI::Generic,
|
57
|
-
node_context: NodeContext,
|
58
|
-
dispatcher: Prism::Dispatcher,
|
59
|
-
sorbet_level: RubyDocument::SorbetLevel,
|
60
|
-
).void
|
61
|
-
end
|
51
|
+
#: (ResponseBuilders::Hover response_builder, GlobalState global_state, URI::Generic uri, NodeContext node_context, Prism::Dispatcher dispatcher, RubyDocument::SorbetLevel sorbet_level) -> void
|
62
52
|
def initialize(response_builder, global_state, uri, node_context, dispatcher, sorbet_level) # rubocop:disable Metrics/ParameterLists
|
63
53
|
@response_builder = response_builder
|
64
54
|
@global_state = global_state
|
@@ -100,17 +90,17 @@ module RubyLsp
|
|
100
90
|
)
|
101
91
|
end
|
102
92
|
|
103
|
-
|
93
|
+
#: (Prism::StringNode node) -> void
|
104
94
|
def on_string_node_enter(node)
|
105
95
|
generate_heredoc_hover(node)
|
106
96
|
end
|
107
97
|
|
108
|
-
|
98
|
+
#: (Prism::InterpolatedStringNode node) -> void
|
109
99
|
def on_interpolated_string_node_enter(node)
|
110
100
|
generate_heredoc_hover(node)
|
111
101
|
end
|
112
102
|
|
113
|
-
|
103
|
+
#: (Prism::ConstantReadNode node) -> void
|
114
104
|
def on_constant_read_node_enter(node)
|
115
105
|
return if @sorbet_level != RubyDocument::SorbetLevel::Ignore
|
116
106
|
|
@@ -120,14 +110,14 @@ module RubyLsp
|
|
120
110
|
generate_hover(name, node.location)
|
121
111
|
end
|
122
112
|
|
123
|
-
|
113
|
+
#: (Prism::ConstantWriteNode node) -> void
|
124
114
|
def on_constant_write_node_enter(node)
|
125
115
|
return if @sorbet_level != RubyDocument::SorbetLevel::Ignore
|
126
116
|
|
127
117
|
generate_hover(node.name.to_s, node.name_loc)
|
128
118
|
end
|
129
119
|
|
130
|
-
|
120
|
+
#: (Prism::ConstantPathNode node) -> void
|
131
121
|
def on_constant_path_node_enter(node)
|
132
122
|
return if @sorbet_level != RubyDocument::SorbetLevel::Ignore
|
133
123
|
|
@@ -137,7 +127,7 @@ module RubyLsp
|
|
137
127
|
generate_hover(name, node.location)
|
138
128
|
end
|
139
129
|
|
140
|
-
|
130
|
+
#: (Prism::CallNode node) -> void
|
141
131
|
def on_call_node_enter(node)
|
142
132
|
if @path && File.basename(@path) == GEMFILE_NAME && node.name == :gem
|
143
133
|
generate_gem_hover(node)
|
@@ -152,114 +142,114 @@ module RubyLsp
|
|
152
142
|
handle_method_hover(message)
|
153
143
|
end
|
154
144
|
|
155
|
-
|
145
|
+
#: (Prism::GlobalVariableAndWriteNode node) -> void
|
156
146
|
def on_global_variable_and_write_node_enter(node)
|
157
147
|
handle_global_variable_hover(node.name.to_s)
|
158
148
|
end
|
159
149
|
|
160
|
-
|
150
|
+
#: (Prism::GlobalVariableOperatorWriteNode node) -> void
|
161
151
|
def on_global_variable_operator_write_node_enter(node)
|
162
152
|
handle_global_variable_hover(node.name.to_s)
|
163
153
|
end
|
164
154
|
|
165
|
-
|
155
|
+
#: (Prism::GlobalVariableOrWriteNode node) -> void
|
166
156
|
def on_global_variable_or_write_node_enter(node)
|
167
157
|
handle_global_variable_hover(node.name.to_s)
|
168
158
|
end
|
169
159
|
|
170
|
-
|
160
|
+
#: (Prism::GlobalVariableReadNode node) -> void
|
171
161
|
def on_global_variable_read_node_enter(node)
|
172
162
|
handle_global_variable_hover(node.name.to_s)
|
173
163
|
end
|
174
164
|
|
175
|
-
|
165
|
+
#: (Prism::GlobalVariableTargetNode node) -> void
|
176
166
|
def on_global_variable_target_node_enter(node)
|
177
167
|
handle_global_variable_hover(node.name.to_s)
|
178
168
|
end
|
179
169
|
|
180
|
-
|
170
|
+
#: (Prism::GlobalVariableWriteNode node) -> void
|
181
171
|
def on_global_variable_write_node_enter(node)
|
182
172
|
handle_global_variable_hover(node.name.to_s)
|
183
173
|
end
|
184
174
|
|
185
|
-
|
175
|
+
#: (Prism::InstanceVariableReadNode node) -> void
|
186
176
|
def on_instance_variable_read_node_enter(node)
|
187
177
|
handle_instance_variable_hover(node.name.to_s)
|
188
178
|
end
|
189
179
|
|
190
|
-
|
180
|
+
#: (Prism::InstanceVariableWriteNode node) -> void
|
191
181
|
def on_instance_variable_write_node_enter(node)
|
192
182
|
handle_instance_variable_hover(node.name.to_s)
|
193
183
|
end
|
194
184
|
|
195
|
-
|
185
|
+
#: (Prism::InstanceVariableAndWriteNode node) -> void
|
196
186
|
def on_instance_variable_and_write_node_enter(node)
|
197
187
|
handle_instance_variable_hover(node.name.to_s)
|
198
188
|
end
|
199
189
|
|
200
|
-
|
190
|
+
#: (Prism::InstanceVariableOperatorWriteNode node) -> void
|
201
191
|
def on_instance_variable_operator_write_node_enter(node)
|
202
192
|
handle_instance_variable_hover(node.name.to_s)
|
203
193
|
end
|
204
194
|
|
205
|
-
|
195
|
+
#: (Prism::InstanceVariableOrWriteNode node) -> void
|
206
196
|
def on_instance_variable_or_write_node_enter(node)
|
207
197
|
handle_instance_variable_hover(node.name.to_s)
|
208
198
|
end
|
209
199
|
|
210
|
-
|
200
|
+
#: (Prism::InstanceVariableTargetNode node) -> void
|
211
201
|
def on_instance_variable_target_node_enter(node)
|
212
202
|
handle_instance_variable_hover(node.name.to_s)
|
213
203
|
end
|
214
204
|
|
215
|
-
|
205
|
+
#: (Prism::SuperNode node) -> void
|
216
206
|
def on_super_node_enter(node)
|
217
207
|
handle_super_node_hover
|
218
208
|
end
|
219
209
|
|
220
|
-
|
210
|
+
#: (Prism::ForwardingSuperNode node) -> void
|
221
211
|
def on_forwarding_super_node_enter(node)
|
222
212
|
handle_super_node_hover
|
223
213
|
end
|
224
214
|
|
225
|
-
|
215
|
+
#: (Prism::YieldNode node) -> void
|
226
216
|
def on_yield_node_enter(node)
|
227
217
|
handle_keyword_documentation(node.keyword)
|
228
218
|
end
|
229
219
|
|
230
|
-
|
220
|
+
#: (Prism::ClassVariableAndWriteNode node) -> void
|
231
221
|
def on_class_variable_and_write_node_enter(node)
|
232
222
|
handle_class_variable_hover(node.name.to_s)
|
233
223
|
end
|
234
224
|
|
235
|
-
|
225
|
+
#: (Prism::ClassVariableOperatorWriteNode node) -> void
|
236
226
|
def on_class_variable_operator_write_node_enter(node)
|
237
227
|
handle_class_variable_hover(node.name.to_s)
|
238
228
|
end
|
239
229
|
|
240
|
-
|
230
|
+
#: (Prism::ClassVariableOrWriteNode node) -> void
|
241
231
|
def on_class_variable_or_write_node_enter(node)
|
242
232
|
handle_class_variable_hover(node.name.to_s)
|
243
233
|
end
|
244
234
|
|
245
|
-
|
235
|
+
#: (Prism::ClassVariableTargetNode node) -> void
|
246
236
|
def on_class_variable_target_node_enter(node)
|
247
237
|
handle_class_variable_hover(node.name.to_s)
|
248
238
|
end
|
249
239
|
|
250
|
-
|
240
|
+
#: (Prism::ClassVariableReadNode node) -> void
|
251
241
|
def on_class_variable_read_node_enter(node)
|
252
242
|
handle_class_variable_hover(node.name.to_s)
|
253
243
|
end
|
254
244
|
|
255
|
-
|
245
|
+
#: (Prism::ClassVariableWriteNode node) -> void
|
256
246
|
def on_class_variable_write_node_enter(node)
|
257
247
|
handle_class_variable_hover(node.name.to_s)
|
258
248
|
end
|
259
249
|
|
260
250
|
private
|
261
251
|
|
262
|
-
|
252
|
+
#: ((Prism::InterpolatedStringNode | Prism::StringNode) node) -> void
|
263
253
|
def generate_heredoc_hover(node)
|
264
254
|
return unless node.heredoc?
|
265
255
|
|
@@ -284,7 +274,7 @@ module RubyLsp
|
|
284
274
|
end
|
285
275
|
end
|
286
276
|
|
287
|
-
|
277
|
+
#: (String keyword) -> void
|
288
278
|
def handle_keyword_documentation(keyword)
|
289
279
|
content = KEYWORD_DOCS[keyword]
|
290
280
|
return unless content
|
@@ -296,7 +286,7 @@ module RubyLsp
|
|
296
286
|
@response_builder.push(content, category: :documentation)
|
297
287
|
end
|
298
288
|
|
299
|
-
|
289
|
+
#: -> void
|
300
290
|
def handle_super_node_hover
|
301
291
|
# Sorbet can handle super hover on typed true or higher
|
302
292
|
return if sorbet_level_true_or_higher?(@sorbet_level)
|
@@ -307,7 +297,7 @@ module RubyLsp
|
|
307
297
|
handle_method_hover(surrounding_method, inherited_only: true)
|
308
298
|
end
|
309
299
|
|
310
|
-
|
300
|
+
#: (String message, ?inherited_only: bool) -> void
|
311
301
|
def handle_method_hover(message, inherited_only: false)
|
312
302
|
type = @type_inferrer.infer_receiver_type(@node_context)
|
313
303
|
return unless type
|
@@ -330,7 +320,7 @@ module RubyLsp
|
|
330
320
|
end
|
331
321
|
end
|
332
322
|
|
333
|
-
|
323
|
+
#: (String name) -> void
|
334
324
|
def handle_instance_variable_hover(name)
|
335
325
|
# Sorbet enforces that all instance variables be declared on typed strict or higher, which means it will be able
|
336
326
|
# to provide all features for them
|
@@ -349,7 +339,7 @@ module RubyLsp
|
|
349
339
|
# If by any chance we haven't indexed the owner, then there's no way to find the right declaration
|
350
340
|
end
|
351
341
|
|
352
|
-
|
342
|
+
#: (String name) -> void
|
353
343
|
def handle_global_variable_hover(name)
|
354
344
|
entries = @index[name]
|
355
345
|
return unless entries
|
@@ -359,7 +349,7 @@ module RubyLsp
|
|
359
349
|
end
|
360
350
|
end
|
361
351
|
|
362
|
-
|
352
|
+
#: (String name) -> void
|
363
353
|
def handle_class_variable_hover(name)
|
364
354
|
type = @type_inferrer.infer_receiver_type(@node_context)
|
365
355
|
return unless type
|
@@ -374,7 +364,7 @@ module RubyLsp
|
|
374
364
|
# If by any chance we haven't indexed the owner, then there's no way to find the right declaration
|
375
365
|
end
|
376
366
|
|
377
|
-
|
367
|
+
#: (String name, Prism::Location location) -> void
|
378
368
|
def generate_hover(name, location)
|
379
369
|
entries = @index.resolve(name, @node_context.nesting)
|
380
370
|
return unless entries
|
@@ -389,7 +379,7 @@ module RubyLsp
|
|
389
379
|
end
|
390
380
|
end
|
391
381
|
|
392
|
-
|
382
|
+
#: (Prism::CallNode node) -> void
|
393
383
|
def generate_gem_hover(node)
|
394
384
|
first_argument = node.arguments&.arguments&.first
|
395
385
|
return unless first_argument.is_a?(Prism::StringNode)
|
@@ -4,18 +4,11 @@
|
|
4
4
|
module RubyLsp
|
5
5
|
module Listeners
|
6
6
|
class InlayHints
|
7
|
-
extend T::Sig
|
8
7
|
include Requests::Support::Common
|
9
8
|
|
10
9
|
RESCUE_STRING_LENGTH = T.let("rescue".length, Integer)
|
11
10
|
|
12
|
-
|
13
|
-
params(
|
14
|
-
response_builder: ResponseBuilders::CollectionResponseBuilder[Interface::InlayHint],
|
15
|
-
hints_configuration: RequestConfig,
|
16
|
-
dispatcher: Prism::Dispatcher,
|
17
|
-
).void
|
18
|
-
end
|
11
|
+
#: (ResponseBuilders::CollectionResponseBuilder[Interface::InlayHint] response_builder, RequestConfig hints_configuration, Prism::Dispatcher dispatcher) -> void
|
19
12
|
def initialize(response_builder, hints_configuration, dispatcher)
|
20
13
|
@response_builder = response_builder
|
21
14
|
@hints_configuration = hints_configuration
|
@@ -23,7 +16,7 @@ module RubyLsp
|
|
23
16
|
dispatcher.register(self, :on_rescue_node_enter, :on_implicit_node_enter)
|
24
17
|
end
|
25
18
|
|
26
|
-
|
19
|
+
#: (Prism::RescueNode node) -> void
|
27
20
|
def on_rescue_node_enter(node)
|
28
21
|
return unless @hints_configuration.enabled?(:implicitRescue)
|
29
22
|
return unless node.exceptions.empty?
|
@@ -38,7 +31,7 @@ module RubyLsp
|
|
38
31
|
)
|
39
32
|
end
|
40
33
|
|
41
|
-
|
34
|
+
#: (Prism::ImplicitNode node) -> void
|
42
35
|
def on_implicit_node_enter(node)
|
43
36
|
return unless @hints_configuration.enabled?(:implicitHashValue)
|
44
37
|
|
@@ -5,7 +5,6 @@ module RubyLsp
|
|
5
5
|
module Listeners
|
6
6
|
class SemanticHighlighting
|
7
7
|
include Requests::Support::Common
|
8
|
-
extend T::Sig
|
9
8
|
|
10
9
|
SPECIAL_RUBY_METHODS = T.let(
|
11
10
|
[
|
@@ -18,12 +17,7 @@ module RubyLsp
|
|
18
17
|
T::Array[String],
|
19
18
|
)
|
20
19
|
|
21
|
-
|
22
|
-
params(
|
23
|
-
dispatcher: Prism::Dispatcher,
|
24
|
-
response_builder: ResponseBuilders::SemanticHighlighting,
|
25
|
-
).void
|
26
|
-
end
|
20
|
+
#: (Prism::Dispatcher dispatcher, ResponseBuilders::SemanticHighlighting response_builder) -> void
|
27
21
|
def initialize(dispatcher, response_builder)
|
28
22
|
@response_builder = response_builder
|
29
23
|
@special_methods = T.let(nil, T.nilable(T::Array[String]))
|
@@ -62,7 +56,7 @@ module RubyLsp
|
|
62
56
|
)
|
63
57
|
end
|
64
58
|
|
65
|
-
|
59
|
+
#: (Prism::CallNode node) -> void
|
66
60
|
def on_call_node_enter(node)
|
67
61
|
return if @inside_implicit_node
|
68
62
|
|
@@ -85,7 +79,7 @@ module RubyLsp
|
|
85
79
|
end
|
86
80
|
end
|
87
81
|
|
88
|
-
|
82
|
+
#: (Prism::MatchWriteNode node) -> void
|
89
83
|
def on_match_write_node_enter(node)
|
90
84
|
call = node.call
|
91
85
|
|
@@ -95,86 +89,86 @@ module RubyLsp
|
|
95
89
|
end
|
96
90
|
end
|
97
91
|
|
98
|
-
|
92
|
+
#: (Prism::MatchWriteNode node) -> void
|
99
93
|
def on_match_write_node_leave(node)
|
100
94
|
@inside_regex_capture = true if node.call.message == "=~"
|
101
95
|
end
|
102
96
|
|
103
|
-
|
97
|
+
#: (Prism::DefNode node) -> void
|
104
98
|
def on_def_node_enter(node)
|
105
99
|
@current_scope = Scope.new(@current_scope)
|
106
100
|
end
|
107
101
|
|
108
|
-
|
102
|
+
#: (Prism::DefNode node) -> void
|
109
103
|
def on_def_node_leave(node)
|
110
104
|
@current_scope = T.must(@current_scope.parent)
|
111
105
|
end
|
112
106
|
|
113
|
-
|
107
|
+
#: (Prism::BlockNode node) -> void
|
114
108
|
def on_block_node_enter(node)
|
115
109
|
@current_scope = Scope.new(@current_scope)
|
116
110
|
end
|
117
111
|
|
118
|
-
|
112
|
+
#: (Prism::BlockNode node) -> void
|
119
113
|
def on_block_node_leave(node)
|
120
114
|
@current_scope = T.must(@current_scope.parent)
|
121
115
|
end
|
122
116
|
|
123
|
-
|
117
|
+
#: (Prism::BlockLocalVariableNode node) -> void
|
124
118
|
def on_block_local_variable_node_enter(node)
|
125
119
|
@response_builder.add_token(node.location, :variable)
|
126
120
|
end
|
127
121
|
|
128
|
-
|
122
|
+
#: (Prism::BlockParameterNode node) -> void
|
129
123
|
def on_block_parameter_node_enter(node)
|
130
124
|
name = node.name
|
131
125
|
@current_scope.add(name.to_sym, :parameter) if name
|
132
126
|
end
|
133
127
|
|
134
|
-
|
128
|
+
#: (Prism::RequiredKeywordParameterNode node) -> void
|
135
129
|
def on_required_keyword_parameter_node_enter(node)
|
136
130
|
@current_scope.add(node.name, :parameter)
|
137
131
|
end
|
138
132
|
|
139
|
-
|
133
|
+
#: (Prism::OptionalKeywordParameterNode node) -> void
|
140
134
|
def on_optional_keyword_parameter_node_enter(node)
|
141
135
|
@current_scope.add(node.name, :parameter)
|
142
136
|
end
|
143
137
|
|
144
|
-
|
138
|
+
#: (Prism::KeywordRestParameterNode node) -> void
|
145
139
|
def on_keyword_rest_parameter_node_enter(node)
|
146
140
|
name = node.name
|
147
141
|
@current_scope.add(name.to_sym, :parameter) if name
|
148
142
|
end
|
149
143
|
|
150
|
-
|
144
|
+
#: (Prism::OptionalParameterNode node) -> void
|
151
145
|
def on_optional_parameter_node_enter(node)
|
152
146
|
@current_scope.add(node.name, :parameter)
|
153
147
|
end
|
154
148
|
|
155
|
-
|
149
|
+
#: (Prism::RequiredParameterNode node) -> void
|
156
150
|
def on_required_parameter_node_enter(node)
|
157
151
|
@current_scope.add(node.name, :parameter)
|
158
152
|
end
|
159
153
|
|
160
|
-
|
154
|
+
#: (Prism::RestParameterNode node) -> void
|
161
155
|
def on_rest_parameter_node_enter(node)
|
162
156
|
name = node.name
|
163
157
|
@current_scope.add(name.to_sym, :parameter) if name
|
164
158
|
end
|
165
159
|
|
166
|
-
|
160
|
+
#: (Prism::SelfNode node) -> void
|
167
161
|
def on_self_node_enter(node)
|
168
162
|
@response_builder.add_token(node.location, :variable, [:default_library])
|
169
163
|
end
|
170
164
|
|
171
|
-
|
165
|
+
#: (Prism::LocalVariableWriteNode node) -> void
|
172
166
|
def on_local_variable_write_node_enter(node)
|
173
167
|
local = @current_scope.lookup(node.name)
|
174
168
|
@response_builder.add_token(node.name_loc, :parameter) if local&.type == :parameter
|
175
169
|
end
|
176
170
|
|
177
|
-
|
171
|
+
#: (Prism::LocalVariableReadNode node) -> void
|
178
172
|
def on_local_variable_read_node_enter(node)
|
179
173
|
return if @inside_implicit_node
|
180
174
|
|
@@ -188,25 +182,25 @@ module RubyLsp
|
|
188
182
|
@response_builder.add_token(node.location, local&.type || :variable)
|
189
183
|
end
|
190
184
|
|
191
|
-
|
185
|
+
#: (Prism::LocalVariableAndWriteNode node) -> void
|
192
186
|
def on_local_variable_and_write_node_enter(node)
|
193
187
|
local = @current_scope.lookup(node.name)
|
194
188
|
@response_builder.add_token(node.name_loc, :parameter) if local&.type == :parameter
|
195
189
|
end
|
196
190
|
|
197
|
-
|
191
|
+
#: (Prism::LocalVariableOperatorWriteNode node) -> void
|
198
192
|
def on_local_variable_operator_write_node_enter(node)
|
199
193
|
local = @current_scope.lookup(node.name)
|
200
194
|
@response_builder.add_token(node.name_loc, :parameter) if local&.type == :parameter
|
201
195
|
end
|
202
196
|
|
203
|
-
|
197
|
+
#: (Prism::LocalVariableOrWriteNode node) -> void
|
204
198
|
def on_local_variable_or_write_node_enter(node)
|
205
199
|
local = @current_scope.lookup(node.name)
|
206
200
|
@response_builder.add_token(node.name_loc, :parameter) if local&.type == :parameter
|
207
201
|
end
|
208
202
|
|
209
|
-
|
203
|
+
#: (Prism::LocalVariableTargetNode node) -> void
|
210
204
|
def on_local_variable_target_node_enter(node)
|
211
205
|
# If we're inside a regex capture, Prism will add LocalVariableTarget nodes for each captured variable.
|
212
206
|
# Unfortunately, if the regex contains a backslash, the location will be incorrect and we'll end up highlighting
|
@@ -218,7 +212,7 @@ module RubyLsp
|
|
218
212
|
@response_builder.add_token(node.location, local&.type || :variable)
|
219
213
|
end
|
220
214
|
|
221
|
-
|
215
|
+
#: (Prism::ClassNode node) -> void
|
222
216
|
def on_class_node_enter(node)
|
223
217
|
constant_path = node.constant_path
|
224
218
|
|
@@ -257,7 +251,7 @@ module RubyLsp
|
|
257
251
|
end
|
258
252
|
end
|
259
253
|
|
260
|
-
|
254
|
+
#: (Prism::ModuleNode node) -> void
|
261
255
|
def on_module_node_enter(node)
|
262
256
|
constant_path = node.constant_path
|
263
257
|
|
@@ -278,12 +272,12 @@ module RubyLsp
|
|
278
272
|
end
|
279
273
|
end
|
280
274
|
|
281
|
-
|
275
|
+
#: (Prism::ImplicitNode node) -> void
|
282
276
|
def on_implicit_node_enter(node)
|
283
277
|
@inside_implicit_node = true
|
284
278
|
end
|
285
279
|
|
286
|
-
|
280
|
+
#: (Prism::ImplicitNode node) -> void
|
287
281
|
def on_implicit_node_leave(node)
|
288
282
|
@inside_implicit_node = false
|
289
283
|
end
|
@@ -292,12 +286,12 @@ module RubyLsp
|
|
292
286
|
|
293
287
|
# Textmate provides highlighting for a subset of these special Ruby-specific methods. We want to utilize that
|
294
288
|
# highlighting, so we avoid making a semantic token for it.
|
295
|
-
|
289
|
+
#: (String method_name) -> bool
|
296
290
|
def special_method?(method_name)
|
297
291
|
SPECIAL_RUBY_METHODS.include?(method_name)
|
298
292
|
end
|
299
293
|
|
300
|
-
|
294
|
+
#: (Prism::CallNode node) -> void
|
301
295
|
def process_regexp_locals(node)
|
302
296
|
receiver = node.receiver
|
303
297
|
|
@@ -4,18 +4,9 @@
|
|
4
4
|
module RubyLsp
|
5
5
|
module Listeners
|
6
6
|
class SignatureHelp
|
7
|
-
extend T::Sig
|
8
7
|
include Requests::Support::Common
|
9
8
|
|
10
|
-
|
11
|
-
params(
|
12
|
-
response_builder: ResponseBuilders::SignatureHelp,
|
13
|
-
global_state: GlobalState,
|
14
|
-
node_context: NodeContext,
|
15
|
-
dispatcher: Prism::Dispatcher,
|
16
|
-
sorbet_level: RubyDocument::SorbetLevel,
|
17
|
-
).void
|
18
|
-
end
|
9
|
+
#: (ResponseBuilders::SignatureHelp response_builder, GlobalState global_state, NodeContext node_context, Prism::Dispatcher dispatcher, RubyDocument::SorbetLevel sorbet_level) -> void
|
19
10
|
def initialize(response_builder, global_state, node_context, dispatcher, sorbet_level)
|
20
11
|
@sorbet_level = sorbet_level
|
21
12
|
@response_builder = response_builder
|
@@ -26,7 +17,7 @@ module RubyLsp
|
|
26
17
|
dispatcher.register(self, :on_call_node_enter)
|
27
18
|
end
|
28
19
|
|
29
|
-
|
20
|
+
#: (Prism::CallNode node) -> void
|
30
21
|
def on_call_node_enter(node)
|
31
22
|
return if sorbet_level_true_or_higher?(@sorbet_level)
|
32
23
|
|
@@ -67,9 +58,7 @@ module RubyLsp
|
|
67
58
|
|
68
59
|
private
|
69
60
|
|
70
|
-
|
71
|
-
params(node: Prism::CallNode, signatures: T::Array[RubyIndexer::Entry::Signature]).returns([Integer, Integer])
|
72
|
-
end
|
61
|
+
#: (Prism::CallNode node, Array[RubyIndexer::Entry::Signature] signatures) -> [Integer, Integer]
|
73
62
|
def determine_active_signature_and_parameter(node, signatures)
|
74
63
|
arguments_node = node.arguments
|
75
64
|
arguments = arguments_node&.arguments || []
|
@@ -93,15 +82,7 @@ module RubyLsp
|
|
93
82
|
[active_sig_index, active_parameter]
|
94
83
|
end
|
95
84
|
|
96
|
-
|
97
|
-
params(
|
98
|
-
signatures: T::Array[RubyIndexer::Entry::Signature],
|
99
|
-
method_name: String,
|
100
|
-
methods: T::Array[RubyIndexer::Entry],
|
101
|
-
title: String,
|
102
|
-
extra_links: T.nilable(String),
|
103
|
-
).returns(T::Array[Interface::SignatureInformation])
|
104
|
-
end
|
85
|
+
#: (Array[RubyIndexer::Entry::Signature] signatures, String method_name, Array[RubyIndexer::Entry] methods, String title, String? extra_links) -> Array[Interface::SignatureInformation]
|
105
86
|
def generate_signatures(signatures, method_name, methods, title, extra_links)
|
106
87
|
signatures.map do |signature|
|
107
88
|
Interface::SignatureInformation.new(
|