ruby-lsp 0.23.11 → 0.26.6
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 +10 -4
- data/exe/ruby-lsp-check +0 -4
- data/exe/ruby-lsp-launcher +46 -22
- data/exe/ruby-lsp-test-exec +6 -0
- data/lib/rubocop/cop/ruby_lsp/use_language_server_aliases.rb +1 -2
- data/lib/rubocop/cop/ruby_lsp/use_register_with_handler_method.rb +3 -6
- data/lib/ruby_indexer/lib/ruby_indexer/configuration.rb +85 -118
- data/lib/ruby_indexer/lib/ruby_indexer/declaration_listener.rb +159 -183
- data/lib/ruby_indexer/lib/ruby_indexer/enhancement.rb +10 -14
- data/lib/ruby_indexer/lib/ruby_indexer/entry.rb +130 -253
- data/lib/ruby_indexer/lib/ruby_indexer/index.rb +189 -285
- data/lib/ruby_indexer/lib/ruby_indexer/location.rb +4 -27
- data/lib/ruby_indexer/lib/ruby_indexer/prefix_tree.rb +23 -27
- data/lib/ruby_indexer/lib/ruby_indexer/rbs_indexer.rb +31 -59
- data/lib/ruby_indexer/lib/ruby_indexer/reference_finder.rb +58 -68
- data/lib/ruby_indexer/lib/ruby_indexer/uri.rb +17 -19
- data/lib/ruby_indexer/lib/ruby_indexer/visibility_scope.rb +7 -11
- data/lib/ruby_lsp/addon.rb +88 -86
- data/lib/ruby_lsp/base_server.rb +79 -65
- data/lib/ruby_lsp/client_capabilities.rb +16 -13
- data/lib/ruby_lsp/document.rb +205 -104
- data/lib/ruby_lsp/erb_document.rb +45 -47
- data/lib/ruby_lsp/global_state.rb +134 -86
- data/lib/ruby_lsp/internal.rb +8 -3
- data/lib/ruby_lsp/listeners/code_lens.rb +82 -89
- data/lib/ruby_lsp/listeners/completion.rb +81 -76
- data/lib/ruby_lsp/listeners/definition.rb +78 -72
- data/lib/ruby_lsp/listeners/document_highlight.rb +149 -151
- data/lib/ruby_lsp/listeners/document_link.rb +93 -86
- data/lib/ruby_lsp/listeners/document_symbol.rb +38 -52
- data/lib/ruby_lsp/listeners/folding_ranges.rb +40 -43
- data/lib/ruby_lsp/listeners/hover.rb +109 -117
- data/lib/ruby_lsp/listeners/inlay_hints.rb +8 -13
- data/lib/ruby_lsp/listeners/semantic_highlighting.rb +54 -56
- data/lib/ruby_lsp/listeners/signature_help.rb +12 -27
- data/lib/ruby_lsp/listeners/spec_style.rb +231 -0
- data/lib/ruby_lsp/listeners/test_discovery.rb +107 -0
- data/lib/ruby_lsp/listeners/test_style.rb +207 -95
- data/lib/ruby_lsp/node_context.rb +12 -39
- data/lib/ruby_lsp/rbs_document.rb +10 -11
- data/lib/ruby_lsp/requests/code_action_resolve.rb +92 -66
- data/lib/ruby_lsp/requests/code_actions.rb +34 -31
- data/lib/ruby_lsp/requests/code_lens.rb +31 -21
- data/lib/ruby_lsp/requests/completion.rb +8 -21
- data/lib/ruby_lsp/requests/completion_resolve.rb +14 -12
- data/lib/ruby_lsp/requests/definition.rb +8 -20
- data/lib/ruby_lsp/requests/diagnostics.rb +8 -11
- data/lib/ruby_lsp/requests/discover_tests.rb +20 -7
- data/lib/ruby_lsp/requests/document_highlight.rb +6 -16
- data/lib/ruby_lsp/requests/document_link.rb +6 -17
- data/lib/ruby_lsp/requests/document_symbol.rb +5 -8
- data/lib/ruby_lsp/requests/folding_ranges.rb +7 -15
- data/lib/ruby_lsp/requests/formatting.rb +6 -9
- data/lib/ruby_lsp/requests/go_to_relevant_file.rb +139 -0
- data/lib/ruby_lsp/requests/hover.rb +12 -25
- data/lib/ruby_lsp/requests/inlay_hints.rb +8 -19
- data/lib/ruby_lsp/requests/on_type_formatting.rb +32 -40
- data/lib/ruby_lsp/requests/prepare_rename.rb +5 -10
- data/lib/ruby_lsp/requests/prepare_type_hierarchy.rb +5 -15
- data/lib/ruby_lsp/requests/range_formatting.rb +5 -6
- data/lib/ruby_lsp/requests/references.rb +17 -57
- data/lib/ruby_lsp/requests/rename.rb +27 -51
- data/lib/ruby_lsp/requests/request.rb +13 -25
- data/lib/ruby_lsp/requests/selection_ranges.rb +7 -7
- data/lib/ruby_lsp/requests/semantic_highlighting.rb +16 -35
- data/lib/ruby_lsp/requests/show_syntax_tree.rb +7 -8
- data/lib/ruby_lsp/requests/signature_help.rb +9 -27
- data/lib/ruby_lsp/requests/support/annotation.rb +4 -10
- data/lib/ruby_lsp/requests/support/common.rb +23 -61
- data/lib/ruby_lsp/requests/support/formatter.rb +16 -15
- data/lib/ruby_lsp/requests/support/package_url.rb +414 -0
- data/lib/ruby_lsp/requests/support/rubocop_diagnostic.rb +27 -35
- data/lib/ruby_lsp/requests/support/rubocop_formatter.rb +13 -16
- data/lib/ruby_lsp/requests/support/rubocop_runner.rb +34 -36
- data/lib/ruby_lsp/requests/support/selection_range.rb +1 -3
- data/lib/ruby_lsp/requests/support/sorbet.rb +29 -38
- data/lib/ruby_lsp/requests/support/source_uri.rb +22 -33
- data/lib/ruby_lsp/requests/support/syntax_tree_formatter.rb +12 -19
- data/lib/ruby_lsp/requests/support/test_item.rb +16 -14
- data/lib/ruby_lsp/requests/type_hierarchy_supertypes.rb +5 -6
- data/lib/ruby_lsp/requests/workspace_symbol.rb +24 -16
- data/lib/ruby_lsp/response_builders/collection_response_builder.rb +6 -9
- data/lib/ruby_lsp/response_builders/document_symbol.rb +15 -21
- data/lib/ruby_lsp/response_builders/hover.rb +12 -18
- data/lib/ruby_lsp/response_builders/response_builder.rb +6 -7
- data/lib/ruby_lsp/response_builders/semantic_highlighting.rb +62 -91
- data/lib/ruby_lsp/response_builders/signature_help.rb +6 -8
- data/lib/ruby_lsp/response_builders/test_collection.rb +35 -13
- data/lib/ruby_lsp/ruby_document.rb +32 -98
- data/lib/ruby_lsp/scope.rb +7 -11
- data/lib/ruby_lsp/scripts/compose_bundle.rb +7 -5
- data/lib/ruby_lsp/server.rb +305 -198
- data/lib/ruby_lsp/setup_bundler.rb +160 -97
- data/lib/ruby_lsp/static_docs.rb +12 -7
- data/lib/ruby_lsp/store.rb +21 -49
- data/lib/ruby_lsp/test_helper.rb +3 -16
- data/lib/ruby_lsp/test_reporters/lsp_reporter.rb +241 -0
- data/lib/ruby_lsp/test_reporters/minitest_reporter.rb +145 -0
- data/lib/ruby_lsp/test_reporters/test_unit_reporter.rb +92 -0
- data/lib/ruby_lsp/type_inferrer.rb +13 -14
- data/lib/ruby_lsp/utils.rb +138 -93
- data/static_docs/break.md +103 -0
- metadata +15 -34
- data/lib/ruby_indexer/test/class_variables_test.rb +0 -140
- data/lib/ruby_indexer/test/classes_and_modules_test.rb +0 -745
- data/lib/ruby_indexer/test/configuration_test.rb +0 -239
- data/lib/ruby_indexer/test/constant_test.rb +0 -402
- data/lib/ruby_indexer/test/enhancements_test.rb +0 -325
- data/lib/ruby_indexer/test/global_variable_test.rb +0 -49
- data/lib/ruby_indexer/test/index_test.rb +0 -2186
- data/lib/ruby_indexer/test/instance_variables_test.rb +0 -240
- data/lib/ruby_indexer/test/method_test.rb +0 -947
- data/lib/ruby_indexer/test/prefix_tree_test.rb +0 -150
- data/lib/ruby_indexer/test/rbs_indexer_test.rb +0 -386
- data/lib/ruby_indexer/test/reference_finder_test.rb +0 -330
- data/lib/ruby_indexer/test/test_case.rb +0 -51
- data/lib/ruby_indexer/test/uri_test.rb +0 -72
- data/lib/ruby_lsp/load_sorbet.rb +0 -62
|
@@ -4,30 +4,16 @@
|
|
|
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, Symbol language_id, URI::Generic uri, NodeContext node_context, Prism::Dispatcher dispatcher, 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
|
|
29
|
-
@index =
|
|
30
|
-
@type_inferrer =
|
|
15
|
+
@index = global_state.index #: RubyIndexer::Index
|
|
16
|
+
@type_inferrer = global_state.type_inferrer #: TypeInferrer
|
|
31
17
|
@language_id = language_id
|
|
32
18
|
@uri = uri
|
|
33
19
|
@node_context = node_context
|
|
@@ -64,10 +50,10 @@ 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
|
-
return if
|
|
56
|
+
return if @sorbet_level.true_or_higher? && self_receiver?(node)
|
|
71
57
|
|
|
72
58
|
message = node.message
|
|
73
59
|
return unless message
|
|
@@ -76,36 +62,38 @@ module RubyLsp
|
|
|
76
62
|
|
|
77
63
|
# Until we can properly infer the receiver type in erb files (maybe with ruby-lsp-rails),
|
|
78
64
|
# treating method calls' type as `nil` will allow users to get some completion support first
|
|
79
|
-
if @language_id ==
|
|
65
|
+
if @language_id == :erb && inferrer_receiver_type&.name == "Object"
|
|
80
66
|
inferrer_receiver_type = nil
|
|
81
67
|
end
|
|
82
68
|
|
|
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
|
-
enclosing_call
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
74
|
+
with_enclosing_call(node) do |enclosing_call, name|
|
|
75
|
+
case name
|
|
76
|
+
when :require, :require_relative
|
|
77
|
+
handle_require_definition(node, name)
|
|
78
|
+
when :send, :public_send
|
|
79
|
+
handle_send_or_public_send_definition(enclosing_call, node) { node.content }
|
|
80
|
+
end
|
|
81
|
+
end
|
|
95
82
|
end
|
|
96
83
|
|
|
97
|
-
|
|
84
|
+
#: (Prism::SymbolNode node) -> void
|
|
98
85
|
def on_symbol_node_enter(node)
|
|
99
|
-
enclosing_call
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
86
|
+
with_enclosing_call(node) do |enclosing_call, name|
|
|
87
|
+
case name
|
|
88
|
+
when :autoload
|
|
89
|
+
handle_autoload_definition(enclosing_call)
|
|
90
|
+
when :send, :public_send
|
|
91
|
+
handle_send_or_public_send_definition(enclosing_call, node) { node.unescaped }
|
|
92
|
+
end
|
|
93
|
+
end
|
|
106
94
|
end
|
|
107
95
|
|
|
108
|
-
|
|
96
|
+
#: (Prism::BlockArgumentNode node) -> void
|
|
109
97
|
def on_block_argument_node_enter(node)
|
|
110
98
|
expression = node.expression
|
|
111
99
|
return unless expression.is_a?(Prism::SymbolNode)
|
|
@@ -116,7 +104,7 @@ module RubyLsp
|
|
|
116
104
|
handle_method_definition(value, nil)
|
|
117
105
|
end
|
|
118
106
|
|
|
119
|
-
|
|
107
|
+
#: (Prism::ConstantPathNode node) -> void
|
|
120
108
|
def on_constant_path_node_enter(node)
|
|
121
109
|
name = RubyIndexer::Index.constant_name(node)
|
|
122
110
|
return if name.nil?
|
|
@@ -124,7 +112,7 @@ module RubyLsp
|
|
|
124
112
|
find_in_index(name)
|
|
125
113
|
end
|
|
126
114
|
|
|
127
|
-
|
|
115
|
+
#: (Prism::ConstantReadNode node) -> void
|
|
128
116
|
def on_constant_read_node_enter(node)
|
|
129
117
|
name = RubyIndexer::Index.constant_name(node)
|
|
130
118
|
return if name.nil?
|
|
@@ -132,112 +120,130 @@ module RubyLsp
|
|
|
132
120
|
find_in_index(name)
|
|
133
121
|
end
|
|
134
122
|
|
|
135
|
-
|
|
123
|
+
#: (Prism::GlobalVariableAndWriteNode node) -> void
|
|
136
124
|
def on_global_variable_and_write_node_enter(node)
|
|
137
125
|
handle_global_variable_definition(node.name.to_s)
|
|
138
126
|
end
|
|
139
127
|
|
|
140
|
-
|
|
128
|
+
#: (Prism::GlobalVariableOperatorWriteNode node) -> void
|
|
141
129
|
def on_global_variable_operator_write_node_enter(node)
|
|
142
130
|
handle_global_variable_definition(node.name.to_s)
|
|
143
131
|
end
|
|
144
132
|
|
|
145
|
-
|
|
133
|
+
#: (Prism::GlobalVariableOrWriteNode node) -> void
|
|
146
134
|
def on_global_variable_or_write_node_enter(node)
|
|
147
135
|
handle_global_variable_definition(node.name.to_s)
|
|
148
136
|
end
|
|
149
137
|
|
|
150
|
-
|
|
138
|
+
#: (Prism::GlobalVariableReadNode node) -> void
|
|
151
139
|
def on_global_variable_read_node_enter(node)
|
|
152
140
|
handle_global_variable_definition(node.name.to_s)
|
|
153
141
|
end
|
|
154
142
|
|
|
155
|
-
|
|
143
|
+
#: (Prism::GlobalVariableTargetNode node) -> void
|
|
156
144
|
def on_global_variable_target_node_enter(node)
|
|
157
145
|
handle_global_variable_definition(node.name.to_s)
|
|
158
146
|
end
|
|
159
147
|
|
|
160
|
-
|
|
148
|
+
#: (Prism::GlobalVariableWriteNode node) -> void
|
|
161
149
|
def on_global_variable_write_node_enter(node)
|
|
162
150
|
handle_global_variable_definition(node.name.to_s)
|
|
163
151
|
end
|
|
164
152
|
|
|
165
|
-
|
|
153
|
+
#: (Prism::InstanceVariableReadNode node) -> void
|
|
166
154
|
def on_instance_variable_read_node_enter(node)
|
|
167
155
|
handle_instance_variable_definition(node.name.to_s)
|
|
168
156
|
end
|
|
169
157
|
|
|
170
|
-
|
|
158
|
+
#: (Prism::InstanceVariableWriteNode node) -> void
|
|
171
159
|
def on_instance_variable_write_node_enter(node)
|
|
172
160
|
handle_instance_variable_definition(node.name.to_s)
|
|
173
161
|
end
|
|
174
162
|
|
|
175
|
-
|
|
163
|
+
#: (Prism::InstanceVariableAndWriteNode node) -> void
|
|
176
164
|
def on_instance_variable_and_write_node_enter(node)
|
|
177
165
|
handle_instance_variable_definition(node.name.to_s)
|
|
178
166
|
end
|
|
179
167
|
|
|
180
|
-
|
|
168
|
+
#: (Prism::InstanceVariableOperatorWriteNode node) -> void
|
|
181
169
|
def on_instance_variable_operator_write_node_enter(node)
|
|
182
170
|
handle_instance_variable_definition(node.name.to_s)
|
|
183
171
|
end
|
|
184
172
|
|
|
185
|
-
|
|
173
|
+
#: (Prism::InstanceVariableOrWriteNode node) -> void
|
|
186
174
|
def on_instance_variable_or_write_node_enter(node)
|
|
187
175
|
handle_instance_variable_definition(node.name.to_s)
|
|
188
176
|
end
|
|
189
177
|
|
|
190
|
-
|
|
178
|
+
#: (Prism::InstanceVariableTargetNode node) -> void
|
|
191
179
|
def on_instance_variable_target_node_enter(node)
|
|
192
180
|
handle_instance_variable_definition(node.name.to_s)
|
|
193
181
|
end
|
|
194
182
|
|
|
195
|
-
|
|
183
|
+
#: (Prism::SuperNode node) -> void
|
|
196
184
|
def on_super_node_enter(node)
|
|
197
185
|
handle_super_node_definition
|
|
198
186
|
end
|
|
199
187
|
|
|
200
|
-
|
|
188
|
+
#: (Prism::ForwardingSuperNode node) -> void
|
|
201
189
|
def on_forwarding_super_node_enter(node)
|
|
202
190
|
handle_super_node_definition
|
|
203
191
|
end
|
|
204
192
|
|
|
205
|
-
|
|
193
|
+
#: (Prism::ClassVariableAndWriteNode node) -> void
|
|
206
194
|
def on_class_variable_and_write_node_enter(node)
|
|
207
195
|
handle_class_variable_definition(node.name.to_s)
|
|
208
196
|
end
|
|
209
197
|
|
|
210
|
-
|
|
198
|
+
#: (Prism::ClassVariableOperatorWriteNode node) -> void
|
|
211
199
|
def on_class_variable_operator_write_node_enter(node)
|
|
212
200
|
handle_class_variable_definition(node.name.to_s)
|
|
213
201
|
end
|
|
214
202
|
|
|
215
|
-
|
|
203
|
+
#: (Prism::ClassVariableOrWriteNode node) -> void
|
|
216
204
|
def on_class_variable_or_write_node_enter(node)
|
|
217
205
|
handle_class_variable_definition(node.name.to_s)
|
|
218
206
|
end
|
|
219
207
|
|
|
220
|
-
|
|
208
|
+
#: (Prism::ClassVariableTargetNode node) -> void
|
|
221
209
|
def on_class_variable_target_node_enter(node)
|
|
222
210
|
handle_class_variable_definition(node.name.to_s)
|
|
223
211
|
end
|
|
224
212
|
|
|
225
|
-
|
|
213
|
+
#: (Prism::ClassVariableReadNode node) -> void
|
|
226
214
|
def on_class_variable_read_node_enter(node)
|
|
227
215
|
handle_class_variable_definition(node.name.to_s)
|
|
228
216
|
end
|
|
229
217
|
|
|
230
|
-
|
|
218
|
+
#: (Prism::ClassVariableWriteNode node) -> void
|
|
231
219
|
def on_class_variable_write_node_enter(node)
|
|
232
220
|
handle_class_variable_definition(node.name.to_s)
|
|
233
221
|
end
|
|
234
222
|
|
|
235
223
|
private
|
|
236
224
|
|
|
237
|
-
|
|
225
|
+
#: (Prism::Node node) { (Prism::CallNode, Symbol) -> void } -> void
|
|
226
|
+
def with_enclosing_call(node, &block)
|
|
227
|
+
enclosing_call = @node_context.call_node
|
|
228
|
+
return unless enclosing_call
|
|
229
|
+
|
|
230
|
+
block.call(enclosing_call, enclosing_call.name)
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
#: (Prism::CallNode enclosing_call, Prism::Node node) { -> String } -> void
|
|
234
|
+
def handle_send_or_public_send_definition(enclosing_call, node, &block)
|
|
235
|
+
first_argument = enclosing_call.arguments&.arguments&.first
|
|
236
|
+
return unless first_argument.eql?(node)
|
|
237
|
+
|
|
238
|
+
method_name = block.call
|
|
239
|
+
|
|
240
|
+
handle_method_definition(method_name, nil)
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
#: -> void
|
|
238
244
|
def handle_super_node_definition
|
|
239
245
|
# Sorbet can handle super hover on typed true or higher
|
|
240
|
-
return if
|
|
246
|
+
return if @sorbet_level.true_or_higher?
|
|
241
247
|
|
|
242
248
|
surrounding_method = @node_context.surrounding_method
|
|
243
249
|
return unless surrounding_method
|
|
@@ -249,7 +255,7 @@ module RubyLsp
|
|
|
249
255
|
)
|
|
250
256
|
end
|
|
251
257
|
|
|
252
|
-
|
|
258
|
+
#: (String name) -> void
|
|
253
259
|
def handle_global_variable_definition(name)
|
|
254
260
|
entries = @index[name]
|
|
255
261
|
|
|
@@ -268,7 +274,7 @@ module RubyLsp
|
|
|
268
274
|
end
|
|
269
275
|
end
|
|
270
276
|
|
|
271
|
-
|
|
277
|
+
#: (String name) -> void
|
|
272
278
|
def handle_class_variable_definition(name)
|
|
273
279
|
type = @type_inferrer.infer_receiver_type(@node_context)
|
|
274
280
|
return unless type
|
|
@@ -286,11 +292,11 @@ module RubyLsp
|
|
|
286
292
|
# If by any chance we haven't indexed the owner, then there's no way to find the right declaration
|
|
287
293
|
end
|
|
288
294
|
|
|
289
|
-
|
|
295
|
+
#: (String name) -> void
|
|
290
296
|
def handle_instance_variable_definition(name)
|
|
291
297
|
# Sorbet enforces that all instance variables be declared on typed strict or higher, which means it will be able
|
|
292
298
|
# to provide all features for them
|
|
293
|
-
return if @sorbet_level
|
|
299
|
+
return if @sorbet_level.strict?
|
|
294
300
|
|
|
295
301
|
type = @type_inferrer.infer_receiver_type(@node_context)
|
|
296
302
|
return unless type
|
|
@@ -313,7 +319,7 @@ module RubyLsp
|
|
|
313
319
|
# If by any chance we haven't indexed the owner, then there's no way to find the right declaration
|
|
314
320
|
end
|
|
315
321
|
|
|
316
|
-
|
|
322
|
+
#: (String message, TypeInferrer::Type? receiver_type, ?inherited_only: bool) -> void
|
|
317
323
|
def handle_method_definition(message, receiver_type, inherited_only: false)
|
|
318
324
|
methods = if receiver_type
|
|
319
325
|
@index.resolve_method(message, receiver_type.name, inherited_only: inherited_only)
|
|
@@ -331,7 +337,7 @@ module RubyLsp
|
|
|
331
337
|
methods.each do |target_method|
|
|
332
338
|
uri = target_method.uri
|
|
333
339
|
full_path = uri.full_path
|
|
334
|
-
next if
|
|
340
|
+
next if @sorbet_level.true_or_higher? && (!full_path || not_in_dependencies?(full_path))
|
|
335
341
|
|
|
336
342
|
@response_builder << Interface::LocationLink.new(
|
|
337
343
|
target_uri: uri.to_s,
|
|
@@ -341,7 +347,7 @@ module RubyLsp
|
|
|
341
347
|
end
|
|
342
348
|
end
|
|
343
349
|
|
|
344
|
-
|
|
350
|
+
#: (Prism::StringNode node, Symbol message) -> void
|
|
345
351
|
def handle_require_definition(node, message)
|
|
346
352
|
case message
|
|
347
353
|
when :require
|
|
@@ -378,7 +384,7 @@ module RubyLsp
|
|
|
378
384
|
end
|
|
379
385
|
end
|
|
380
386
|
|
|
381
|
-
|
|
387
|
+
#: (Prism::CallNode node) -> void
|
|
382
388
|
def handle_autoload_definition(node)
|
|
383
389
|
argument = node.arguments&.arguments&.first
|
|
384
390
|
return unless argument.is_a?(Prism::SymbolNode)
|
|
@@ -389,14 +395,14 @@ module RubyLsp
|
|
|
389
395
|
find_in_index(constant_name)
|
|
390
396
|
end
|
|
391
397
|
|
|
392
|
-
|
|
398
|
+
#: (String value) -> void
|
|
393
399
|
def find_in_index(value)
|
|
394
400
|
entries = @index.resolve(value, @node_context.nesting)
|
|
395
401
|
return unless entries
|
|
396
402
|
|
|
397
403
|
# We should only allow jumping to the definition of private constants if the constant is defined in the same
|
|
398
404
|
# namespace as the reference
|
|
399
|
-
first_entry =
|
|
405
|
+
first_entry = entries.first #: as !nil
|
|
400
406
|
return if first_entry.private? && first_entry.name != "#{@node_context.fully_qualified_name}::#{value}"
|
|
401
407
|
|
|
402
408
|
entries.each do |entry|
|
|
@@ -406,7 +412,7 @@ module RubyLsp
|
|
|
406
412
|
uri = entry.uri
|
|
407
413
|
full_path = uri.full_path
|
|
408
414
|
|
|
409
|
-
if
|
|
415
|
+
if !@sorbet_level.ignore? && (!full_path || not_in_dependencies?(full_path))
|
|
410
416
|
next
|
|
411
417
|
end
|
|
412
418
|
|