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