ruby-lsp 0.23.11 → 0.23.17
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 +20 -11
- data/lib/rubocop/cop/ruby_lsp/use_language_server_aliases.rb +1 -1
- data/lib/rubocop/cop/ruby_lsp/use_register_with_handler_method.rb +3 -5
- data/lib/ruby_indexer/lib/ruby_indexer/configuration.rb +82 -116
- data/lib/ruby_indexer/lib/ruby_indexer/declaration_listener.rb +134 -183
- data/lib/ruby_indexer/lib/ruby_indexer/enhancement.rb +9 -10
- data/lib/ruby_indexer/lib/ruby_indexer/entry.rb +97 -217
- data/lib/ruby_indexer/lib/ruby_indexer/index.rb +139 -281
- data/lib/ruby_indexer/lib/ruby_indexer/location.rb +4 -27
- data/lib/ruby_indexer/lib/ruby_indexer/prefix_tree.rb +18 -19
- data/lib/ruby_indexer/lib/ruby_indexer/rbs_indexer.rb +23 -55
- data/lib/ruby_indexer/lib/ruby_indexer/reference_finder.rb +47 -61
- 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_indexer/test/class_variables_test.rb +14 -14
- data/lib/ruby_indexer/test/classes_and_modules_test.rb +65 -40
- data/lib/ruby_indexer/test/configuration_test.rb +48 -7
- data/lib/ruby_indexer/test/constant_test.rb +34 -34
- data/lib/ruby_indexer/test/enhancements_test.rb +1 -1
- data/lib/ruby_indexer/test/index_test.rb +146 -135
- data/lib/ruby_indexer/test/instance_variables_test.rb +37 -37
- data/lib/ruby_indexer/test/method_test.rb +149 -123
- data/lib/ruby_indexer/test/prefix_tree_test.rb +13 -13
- data/lib/ruby_indexer/test/rbs_indexer_test.rb +68 -73
- data/lib/ruby_indexer/test/test_case.rb +9 -3
- data/lib/ruby_indexer/test/uri_test.rb +15 -2
- data/lib/ruby_lsp/addon.rb +44 -71
- data/lib/ruby_lsp/base_server.rb +29 -32
- data/lib/ruby_lsp/client_capabilities.rb +10 -12
- data/lib/ruby_lsp/document.rb +40 -54
- data/lib/ruby_lsp/erb_document.rb +37 -41
- data/lib/ruby_lsp/global_state.rb +52 -57
- data/lib/ruby_lsp/internal.rb +2 -0
- data/lib/ruby_lsp/listeners/code_lens.rb +82 -89
- data/lib/ruby_lsp/listeners/completion.rb +67 -73
- data/lib/ruby_lsp/listeners/definition.rb +44 -58
- data/lib/ruby_lsp/listeners/document_highlight.rb +123 -150
- data/lib/ruby_lsp/listeners/document_link.rb +50 -70
- 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 +92 -110
- data/lib/ruby_lsp/listeners/inlay_hints.rb +4 -11
- 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 +155 -0
- data/lib/ruby_lsp/listeners/test_discovery.rb +89 -0
- data/lib/ruby_lsp/listeners/test_style.rb +167 -90
- data/lib/ruby_lsp/node_context.rb +12 -39
- data/lib/ruby_lsp/rbs_document.rb +9 -7
- data/lib/ruby_lsp/requests/code_action_resolve.rb +63 -59
- data/lib/ruby_lsp/requests/code_actions.rb +14 -26
- data/lib/ruby_lsp/requests/code_lens.rb +20 -19
- data/lib/ruby_lsp/requests/completion.rb +7 -20
- data/lib/ruby_lsp/requests/completion_resolve.rb +6 -6
- data/lib/ruby_lsp/requests/definition.rb +7 -17
- data/lib/ruby_lsp/requests/diagnostics.rb +8 -11
- data/lib/ruby_lsp/requests/discover_tests.rb +18 -5
- data/lib/ruby_lsp/requests/document_highlight.rb +5 -15
- 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 +85 -0
- data/lib/ruby_lsp/requests/hover.rb +10 -20
- data/lib/ruby_lsp/requests/inlay_hints.rb +6 -17
- data/lib/ruby_lsp/requests/on_type_formatting.rb +32 -40
- data/lib/ruby_lsp/requests/prepare_rename.rb +4 -9
- 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 +9 -53
- data/lib/ruby_lsp/requests/rename.rb +20 -46
- data/lib/ruby_lsp/requests/request.rb +8 -19
- data/lib/ruby_lsp/requests/selection_ranges.rb +6 -6
- 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 +8 -26
- data/lib/ruby_lsp/requests/support/annotation.rb +4 -10
- data/lib/ruby_lsp/requests/support/common.rb +15 -55
- data/lib/ruby_lsp/requests/support/rubocop_diagnostic.rb +27 -35
- data/lib/ruby_lsp/requests/support/rubocop_formatter.rb +11 -14
- data/lib/ruby_lsp/requests/support/rubocop_runner.rb +22 -34
- 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 +20 -32
- 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 +4 -4
- data/lib/ruby_lsp/response_builders/collection_response_builder.rb +5 -5
- data/lib/ruby_lsp/response_builders/document_symbol.rb +14 -19
- data/lib/ruby_lsp/response_builders/hover.rb +11 -14
- data/lib/ruby_lsp/response_builders/response_builder.rb +1 -1
- data/lib/ruby_lsp/response_builders/semantic_highlighting.rb +60 -88
- data/lib/ruby_lsp/response_builders/signature_help.rb +5 -6
- data/lib/ruby_lsp/response_builders/test_collection.rb +43 -10
- data/lib/ruby_lsp/ruby_document.rb +24 -92
- data/lib/ruby_lsp/scope.rb +7 -11
- data/lib/ruby_lsp/scripts/compose_bundle.rb +6 -4
- data/lib/ruby_lsp/server.rb +182 -99
- data/lib/ruby_lsp/setup_bundler.rb +65 -60
- data/lib/ruby_lsp/static_docs.rb +11 -7
- data/lib/ruby_lsp/store.rb +29 -47
- data/lib/ruby_lsp/test_helper.rb +2 -12
- data/lib/ruby_lsp/test_reporters/lsp_reporter.rb +191 -0
- data/lib/ruby_lsp/test_reporters/minitest_reporter.rb +105 -0
- data/lib/ruby_lsp/test_reporters/test_unit_reporter.rb +94 -0
- data/lib/ruby_lsp/type_inferrer.rb +13 -14
- data/lib/ruby_lsp/utils.rb +92 -83
- metadata +9 -3
@@ -4,67 +4,51 @@
|
|
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
|
-
ALLOWED_TARGETS =
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
"https://gitlab.com",
|
48
|
-
].freeze,
|
49
|
-
T::Array[String],
|
50
|
-
)
|
51
|
-
|
52
|
-
sig do
|
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
|
9
|
+
ALLOWED_TARGETS = [
|
10
|
+
Prism::CallNode,
|
11
|
+
Prism::ConstantReadNode,
|
12
|
+
Prism::ConstantWriteNode,
|
13
|
+
Prism::ConstantPathNode,
|
14
|
+
Prism::GlobalVariableAndWriteNode,
|
15
|
+
Prism::GlobalVariableOperatorWriteNode,
|
16
|
+
Prism::GlobalVariableOrWriteNode,
|
17
|
+
Prism::GlobalVariableReadNode,
|
18
|
+
Prism::GlobalVariableTargetNode,
|
19
|
+
Prism::GlobalVariableWriteNode,
|
20
|
+
Prism::InstanceVariableReadNode,
|
21
|
+
Prism::InstanceVariableAndWriteNode,
|
22
|
+
Prism::InstanceVariableOperatorWriteNode,
|
23
|
+
Prism::InstanceVariableOrWriteNode,
|
24
|
+
Prism::InstanceVariableTargetNode,
|
25
|
+
Prism::InstanceVariableWriteNode,
|
26
|
+
Prism::SymbolNode,
|
27
|
+
Prism::StringNode,
|
28
|
+
Prism::InterpolatedStringNode,
|
29
|
+
Prism::SuperNode,
|
30
|
+
Prism::ForwardingSuperNode,
|
31
|
+
Prism::YieldNode,
|
32
|
+
Prism::ClassVariableAndWriteNode,
|
33
|
+
Prism::ClassVariableOperatorWriteNode,
|
34
|
+
Prism::ClassVariableOrWriteNode,
|
35
|
+
Prism::ClassVariableReadNode,
|
36
|
+
Prism::ClassVariableTargetNode,
|
37
|
+
Prism::ClassVariableWriteNode,
|
38
|
+
] #: Array[singleton(Prism::Node)]
|
39
|
+
|
40
|
+
ALLOWED_REMOTE_PROVIDERS = [
|
41
|
+
"https://github.com",
|
42
|
+
"https://gitlab.com",
|
43
|
+
].freeze #: Array[String]
|
44
|
+
|
45
|
+
#: (ResponseBuilders::Hover response_builder, GlobalState global_state, URI::Generic uri, NodeContext node_context, Prism::Dispatcher dispatcher, SorbetLevel sorbet_level) -> void
|
62
46
|
def initialize(response_builder, global_state, uri, node_context, dispatcher, sorbet_level) # rubocop:disable Metrics/ParameterLists
|
63
47
|
@response_builder = response_builder
|
64
48
|
@global_state = global_state
|
65
|
-
@index =
|
66
|
-
@type_inferrer =
|
67
|
-
@path =
|
49
|
+
@index = global_state.index #: RubyIndexer::Index
|
50
|
+
@type_inferrer = global_state.type_inferrer #: TypeInferrer
|
51
|
+
@path = uri.to_standardized_path #: String?
|
68
52
|
@node_context = node_context
|
69
53
|
@sorbet_level = sorbet_level
|
70
54
|
|
@@ -100,19 +84,19 @@ module RubyLsp
|
|
100
84
|
)
|
101
85
|
end
|
102
86
|
|
103
|
-
|
87
|
+
#: (Prism::StringNode node) -> void
|
104
88
|
def on_string_node_enter(node)
|
105
89
|
generate_heredoc_hover(node)
|
106
90
|
end
|
107
91
|
|
108
|
-
|
92
|
+
#: (Prism::InterpolatedStringNode node) -> void
|
109
93
|
def on_interpolated_string_node_enter(node)
|
110
94
|
generate_heredoc_hover(node)
|
111
95
|
end
|
112
96
|
|
113
|
-
|
97
|
+
#: (Prism::ConstantReadNode node) -> void
|
114
98
|
def on_constant_read_node_enter(node)
|
115
|
-
return
|
99
|
+
return unless @sorbet_level.ignore?
|
116
100
|
|
117
101
|
name = RubyIndexer::Index.constant_name(node)
|
118
102
|
return if name.nil?
|
@@ -120,16 +104,16 @@ module RubyLsp
|
|
120
104
|
generate_hover(name, node.location)
|
121
105
|
end
|
122
106
|
|
123
|
-
|
107
|
+
#: (Prism::ConstantWriteNode node) -> void
|
124
108
|
def on_constant_write_node_enter(node)
|
125
|
-
return
|
109
|
+
return unless @sorbet_level.ignore?
|
126
110
|
|
127
111
|
generate_hover(node.name.to_s, node.name_loc)
|
128
112
|
end
|
129
113
|
|
130
|
-
|
114
|
+
#: (Prism::ConstantPathNode node) -> void
|
131
115
|
def on_constant_path_node_enter(node)
|
132
|
-
return
|
116
|
+
return unless @sorbet_level.ignore?
|
133
117
|
|
134
118
|
name = RubyIndexer::Index.constant_name(node)
|
135
119
|
return if name.nil?
|
@@ -137,14 +121,14 @@ module RubyLsp
|
|
137
121
|
generate_hover(name, node.location)
|
138
122
|
end
|
139
123
|
|
140
|
-
|
124
|
+
#: (Prism::CallNode node) -> void
|
141
125
|
def on_call_node_enter(node)
|
142
126
|
if @path && File.basename(@path) == GEMFILE_NAME && node.name == :gem
|
143
127
|
generate_gem_hover(node)
|
144
128
|
return
|
145
129
|
end
|
146
130
|
|
147
|
-
return if
|
131
|
+
return if @sorbet_level.true_or_higher? && self_receiver?(node)
|
148
132
|
|
149
133
|
message = node.message
|
150
134
|
return unless message
|
@@ -152,114 +136,114 @@ module RubyLsp
|
|
152
136
|
handle_method_hover(message)
|
153
137
|
end
|
154
138
|
|
155
|
-
|
139
|
+
#: (Prism::GlobalVariableAndWriteNode node) -> void
|
156
140
|
def on_global_variable_and_write_node_enter(node)
|
157
141
|
handle_global_variable_hover(node.name.to_s)
|
158
142
|
end
|
159
143
|
|
160
|
-
|
144
|
+
#: (Prism::GlobalVariableOperatorWriteNode node) -> void
|
161
145
|
def on_global_variable_operator_write_node_enter(node)
|
162
146
|
handle_global_variable_hover(node.name.to_s)
|
163
147
|
end
|
164
148
|
|
165
|
-
|
149
|
+
#: (Prism::GlobalVariableOrWriteNode node) -> void
|
166
150
|
def on_global_variable_or_write_node_enter(node)
|
167
151
|
handle_global_variable_hover(node.name.to_s)
|
168
152
|
end
|
169
153
|
|
170
|
-
|
154
|
+
#: (Prism::GlobalVariableReadNode node) -> void
|
171
155
|
def on_global_variable_read_node_enter(node)
|
172
156
|
handle_global_variable_hover(node.name.to_s)
|
173
157
|
end
|
174
158
|
|
175
|
-
|
159
|
+
#: (Prism::GlobalVariableTargetNode node) -> void
|
176
160
|
def on_global_variable_target_node_enter(node)
|
177
161
|
handle_global_variable_hover(node.name.to_s)
|
178
162
|
end
|
179
163
|
|
180
|
-
|
164
|
+
#: (Prism::GlobalVariableWriteNode node) -> void
|
181
165
|
def on_global_variable_write_node_enter(node)
|
182
166
|
handle_global_variable_hover(node.name.to_s)
|
183
167
|
end
|
184
168
|
|
185
|
-
|
169
|
+
#: (Prism::InstanceVariableReadNode node) -> void
|
186
170
|
def on_instance_variable_read_node_enter(node)
|
187
171
|
handle_instance_variable_hover(node.name.to_s)
|
188
172
|
end
|
189
173
|
|
190
|
-
|
174
|
+
#: (Prism::InstanceVariableWriteNode node) -> void
|
191
175
|
def on_instance_variable_write_node_enter(node)
|
192
176
|
handle_instance_variable_hover(node.name.to_s)
|
193
177
|
end
|
194
178
|
|
195
|
-
|
179
|
+
#: (Prism::InstanceVariableAndWriteNode node) -> void
|
196
180
|
def on_instance_variable_and_write_node_enter(node)
|
197
181
|
handle_instance_variable_hover(node.name.to_s)
|
198
182
|
end
|
199
183
|
|
200
|
-
|
184
|
+
#: (Prism::InstanceVariableOperatorWriteNode node) -> void
|
201
185
|
def on_instance_variable_operator_write_node_enter(node)
|
202
186
|
handle_instance_variable_hover(node.name.to_s)
|
203
187
|
end
|
204
188
|
|
205
|
-
|
189
|
+
#: (Prism::InstanceVariableOrWriteNode node) -> void
|
206
190
|
def on_instance_variable_or_write_node_enter(node)
|
207
191
|
handle_instance_variable_hover(node.name.to_s)
|
208
192
|
end
|
209
193
|
|
210
|
-
|
194
|
+
#: (Prism::InstanceVariableTargetNode node) -> void
|
211
195
|
def on_instance_variable_target_node_enter(node)
|
212
196
|
handle_instance_variable_hover(node.name.to_s)
|
213
197
|
end
|
214
198
|
|
215
|
-
|
199
|
+
#: (Prism::SuperNode node) -> void
|
216
200
|
def on_super_node_enter(node)
|
217
201
|
handle_super_node_hover
|
218
202
|
end
|
219
203
|
|
220
|
-
|
204
|
+
#: (Prism::ForwardingSuperNode node) -> void
|
221
205
|
def on_forwarding_super_node_enter(node)
|
222
206
|
handle_super_node_hover
|
223
207
|
end
|
224
208
|
|
225
|
-
|
209
|
+
#: (Prism::YieldNode node) -> void
|
226
210
|
def on_yield_node_enter(node)
|
227
211
|
handle_keyword_documentation(node.keyword)
|
228
212
|
end
|
229
213
|
|
230
|
-
|
214
|
+
#: (Prism::ClassVariableAndWriteNode node) -> void
|
231
215
|
def on_class_variable_and_write_node_enter(node)
|
232
216
|
handle_class_variable_hover(node.name.to_s)
|
233
217
|
end
|
234
218
|
|
235
|
-
|
219
|
+
#: (Prism::ClassVariableOperatorWriteNode node) -> void
|
236
220
|
def on_class_variable_operator_write_node_enter(node)
|
237
221
|
handle_class_variable_hover(node.name.to_s)
|
238
222
|
end
|
239
223
|
|
240
|
-
|
224
|
+
#: (Prism::ClassVariableOrWriteNode node) -> void
|
241
225
|
def on_class_variable_or_write_node_enter(node)
|
242
226
|
handle_class_variable_hover(node.name.to_s)
|
243
227
|
end
|
244
228
|
|
245
|
-
|
229
|
+
#: (Prism::ClassVariableTargetNode node) -> void
|
246
230
|
def on_class_variable_target_node_enter(node)
|
247
231
|
handle_class_variable_hover(node.name.to_s)
|
248
232
|
end
|
249
233
|
|
250
|
-
|
234
|
+
#: (Prism::ClassVariableReadNode node) -> void
|
251
235
|
def on_class_variable_read_node_enter(node)
|
252
236
|
handle_class_variable_hover(node.name.to_s)
|
253
237
|
end
|
254
238
|
|
255
|
-
|
239
|
+
#: (Prism::ClassVariableWriteNode node) -> void
|
256
240
|
def on_class_variable_write_node_enter(node)
|
257
241
|
handle_class_variable_hover(node.name.to_s)
|
258
242
|
end
|
259
243
|
|
260
244
|
private
|
261
245
|
|
262
|
-
|
246
|
+
#: ((Prism::InterpolatedStringNode | Prism::StringNode) node) -> void
|
263
247
|
def generate_heredoc_hover(node)
|
264
248
|
return unless node.heredoc?
|
265
249
|
|
@@ -284,7 +268,7 @@ module RubyLsp
|
|
284
268
|
end
|
285
269
|
end
|
286
270
|
|
287
|
-
|
271
|
+
#: (String keyword) -> void
|
288
272
|
def handle_keyword_documentation(keyword)
|
289
273
|
content = KEYWORD_DOCS[keyword]
|
290
274
|
return unless content
|
@@ -296,10 +280,10 @@ module RubyLsp
|
|
296
280
|
@response_builder.push(content, category: :documentation)
|
297
281
|
end
|
298
282
|
|
299
|
-
|
283
|
+
#: -> void
|
300
284
|
def handle_super_node_hover
|
301
285
|
# Sorbet can handle super hover on typed true or higher
|
302
|
-
return if
|
286
|
+
return if @sorbet_level.true_or_higher?
|
303
287
|
|
304
288
|
surrounding_method = @node_context.surrounding_method
|
305
289
|
return unless surrounding_method
|
@@ -307,7 +291,7 @@ module RubyLsp
|
|
307
291
|
handle_method_hover(surrounding_method, inherited_only: true)
|
308
292
|
end
|
309
293
|
|
310
|
-
|
294
|
+
#: (String message, ?inherited_only: bool) -> void
|
311
295
|
def handle_method_hover(message, inherited_only: false)
|
312
296
|
type = @type_inferrer.infer_receiver_type(@node_context)
|
313
297
|
return unless type
|
@@ -315,7 +299,7 @@ module RubyLsp
|
|
315
299
|
methods = @index.resolve_method(message, type.name, inherited_only: inherited_only)
|
316
300
|
return unless methods
|
317
301
|
|
318
|
-
first_method =
|
302
|
+
first_method = methods.first #: as !nil
|
319
303
|
|
320
304
|
title = "#{message}#{first_method.decorated_parameters}"
|
321
305
|
title << first_method.formatted_signatures
|
@@ -330,11 +314,11 @@ module RubyLsp
|
|
330
314
|
end
|
331
315
|
end
|
332
316
|
|
333
|
-
|
317
|
+
#: (String name) -> void
|
334
318
|
def handle_instance_variable_hover(name)
|
335
319
|
# Sorbet enforces that all instance variables be declared on typed strict or higher, which means it will be able
|
336
320
|
# to provide all features for them
|
337
|
-
return if @sorbet_level
|
321
|
+
return if @sorbet_level.strict?
|
338
322
|
|
339
323
|
type = @type_inferrer.infer_receiver_type(@node_context)
|
340
324
|
return unless type
|
@@ -349,7 +333,7 @@ module RubyLsp
|
|
349
333
|
# If by any chance we haven't indexed the owner, then there's no way to find the right declaration
|
350
334
|
end
|
351
335
|
|
352
|
-
|
336
|
+
#: (String name) -> void
|
353
337
|
def handle_global_variable_hover(name)
|
354
338
|
entries = @index[name]
|
355
339
|
return unless entries
|
@@ -359,7 +343,7 @@ module RubyLsp
|
|
359
343
|
end
|
360
344
|
end
|
361
345
|
|
362
|
-
|
346
|
+
#: (String name) -> void
|
363
347
|
def handle_class_variable_hover(name)
|
364
348
|
type = @type_inferrer.infer_receiver_type(@node_context)
|
365
349
|
return unless type
|
@@ -374,22 +358,23 @@ module RubyLsp
|
|
374
358
|
# If by any chance we haven't indexed the owner, then there's no way to find the right declaration
|
375
359
|
end
|
376
360
|
|
377
|
-
|
361
|
+
#: (String name, Prism::Location location) -> void
|
378
362
|
def generate_hover(name, location)
|
379
363
|
entries = @index.resolve(name, @node_context.nesting)
|
380
364
|
return unless entries
|
381
365
|
|
382
366
|
# We should only show hover for private constants if the constant is defined in the same namespace as the
|
383
367
|
# reference
|
384
|
-
first_entry =
|
385
|
-
|
368
|
+
first_entry = entries.first #: as !nil
|
369
|
+
full_name = first_entry.name
|
370
|
+
return if first_entry.private? && full_name != "#{@node_context.fully_qualified_name}::#{name}"
|
386
371
|
|
387
|
-
categorized_markdown_from_index_entries(
|
372
|
+
categorized_markdown_from_index_entries(full_name, entries).each do |category, content|
|
388
373
|
@response_builder.push(content, category: category)
|
389
374
|
end
|
390
375
|
end
|
391
376
|
|
392
|
-
|
377
|
+
#: (Prism::CallNode node) -> void
|
393
378
|
def generate_gem_hover(node)
|
394
379
|
first_argument = node.arguments&.arguments&.first
|
395
380
|
return unless first_argument.is_a?(Prism::StringNode)
|
@@ -397,14 +382,11 @@ module RubyLsp
|
|
397
382
|
spec = Gem::Specification.find_by_name(first_argument.content)
|
398
383
|
return unless spec
|
399
384
|
|
400
|
-
info =
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
].find { |text| !text.nil? && !text.empty? },
|
406
|
-
String,
|
407
|
-
)
|
385
|
+
info = [
|
386
|
+
spec.description,
|
387
|
+
spec.summary,
|
388
|
+
"This rubygem does not have a description or summary.",
|
389
|
+
].find { |text| !text.nil? && !text.empty? } #: String
|
408
390
|
|
409
391
|
# Remove leading whitespace if a heredoc was used for the summary or description
|
410
392
|
info = info.gsub(/^ +/, "")
|
@@ -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
|
-
RESCUE_STRING_LENGTH =
|
9
|
+
RESCUE_STRING_LENGTH = "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
|
|