ruby-lsp 0.23.11 → 0.23.13
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_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 +81 -115
- data/lib/ruby_indexer/lib/ruby_indexer/declaration_listener.rb +117 -166
- data/lib/ruby_indexer/lib/ruby_indexer/enhancement.rb +9 -7
- data/lib/ruby_indexer/lib/ruby_indexer/entry.rb +88 -200
- data/lib/ruby_indexer/lib/ruby_indexer/index.rb +56 -192
- data/lib/ruby_indexer/lib/ruby_indexer/location.rb +4 -27
- data/lib/ruby_indexer/lib/ruby_indexer/prefix_tree.rb +14 -16
- data/lib/ruby_indexer/lib/ruby_indexer/rbs_indexer.rb +22 -45
- data/lib/ruby_indexer/lib/ruby_indexer/reference_finder.rb +42 -60
- 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 +42 -3
- data/lib/ruby_indexer/test/method_test.rb +28 -2
- data/lib/ruby_indexer/test/rbs_indexer_test.rb +1 -1
- 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 +34 -45
- data/lib/ruby_lsp/erb_document.rb +24 -36
- data/lib/ruby_lsp/global_state.rb +51 -56
- data/lib/ruby_lsp/internal.rb +2 -0
- data/lib/ruby_lsp/listeners/code_lens.rb +81 -88
- data/lib/ruby_lsp/listeners/completion.rb +36 -55
- data/lib/ruby_lsp/listeners/definition.rb +37 -51
- data/lib/ruby_lsp/listeners/document_highlight.rb +123 -150
- data/lib/ruby_lsp/listeners/document_link.rb +43 -62
- data/lib/ruby_lsp/listeners/document_symbol.rb +35 -49
- data/lib/ruby_lsp/listeners/folding_ranges.rb +32 -39
- data/lib/ruby_lsp/listeners/hover.rb +81 -100
- data/lib/ruby_lsp/listeners/inlay_hints.rb +4 -11
- data/lib/ruby_lsp/listeners/semantic_highlighting.rb +42 -51
- data/lib/ruby_lsp/listeners/signature_help.rb +6 -25
- 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 +160 -88
- data/lib/ruby_lsp/node_context.rb +12 -39
- data/lib/ruby_lsp/rbs_document.rb +8 -6
- data/lib/ruby_lsp/requests/code_action_resolve.rb +10 -10
- data/lib/ruby_lsp/requests/code_actions.rb +14 -26
- data/lib/ruby_lsp/requests/code_lens.rb +6 -17
- data/lib/ruby_lsp/requests/completion.rb +7 -20
- data/lib/ruby_lsp/requests/completion_resolve.rb +5 -5
- data/lib/ruby_lsp/requests/definition.rb +8 -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 +87 -0
- data/lib/ruby_lsp/requests/hover.rb +8 -18
- data/lib/ruby_lsp/requests/inlay_hints.rb +6 -17
- data/lib/ruby_lsp/requests/on_type_formatting.rb +28 -38
- data/lib/ruby_lsp/requests/prepare_rename.rb +4 -9
- data/lib/ruby_lsp/requests/prepare_type_hierarchy.rb +4 -13
- data/lib/ruby_lsp/requests/range_formatting.rb +5 -6
- data/lib/ruby_lsp/requests/references.rb +6 -36
- data/lib/ruby_lsp/requests/rename.rb +11 -37
- data/lib/ruby_lsp/requests/request.rb +7 -19
- data/lib/ruby_lsp/requests/selection_ranges.rb +5 -5
- data/lib/ruby_lsp/requests/semantic_highlighting.rb +12 -31
- data/lib/ruby_lsp/requests/show_syntax_tree.rb +5 -6
- 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 +13 -50
- data/lib/ruby_lsp/requests/support/rubocop_diagnostic.rb +27 -35
- data/lib/ruby_lsp/requests/support/rubocop_formatter.rb +9 -12
- 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 +16 -30
- data/lib/ruby_lsp/requests/support/syntax_tree_formatter.rb +12 -19
- data/lib/ruby_lsp/requests/support/test_item.rb +10 -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 +10 -16
- data/lib/ruby_lsp/response_builders/hover.rb +10 -13
- data/lib/ruby_lsp/response_builders/response_builder.rb +1 -1
- data/lib/ruby_lsp/response_builders/semantic_highlighting.rb +59 -87
- data/lib/ruby_lsp/response_builders/signature_help.rb +5 -6
- data/lib/ruby_lsp/response_builders/test_collection.rb +6 -10
- data/lib/ruby_lsp/ruby_document.rb +22 -60
- data/lib/ruby_lsp/ruby_lsp_reporter_plugin.rb +109 -0
- data/lib/ruby_lsp/scope.rb +7 -11
- data/lib/ruby_lsp/server.rb +133 -74
- data/lib/ruby_lsp/setup_bundler.rb +58 -57
- data/lib/ruby_lsp/static_docs.rb +4 -7
- data/lib/ruby_lsp/store.rb +21 -40
- data/lib/ruby_lsp/test_helper.rb +3 -12
- data/lib/ruby_lsp/test_reporter.rb +207 -0
- data/lib/ruby_lsp/test_unit_test_runner.rb +98 -0
- data/lib/ruby_lsp/type_inferrer.rb +9 -13
- data/lib/ruby_lsp/utils.rb +37 -81
- metadata +9 -3
@@ -4,19 +4,12 @@
|
|
4
4
|
module RubyLsp
|
5
5
|
module Listeners
|
6
6
|
class FoldingRanges
|
7
|
-
extend T::Sig
|
8
7
|
include Requests::Support::Common
|
9
8
|
|
10
|
-
|
11
|
-
params(
|
12
|
-
response_builder: ResponseBuilders::CollectionResponseBuilder[Interface::FoldingRange],
|
13
|
-
comments: T::Array[Prism::Comment],
|
14
|
-
dispatcher: Prism::Dispatcher,
|
15
|
-
).void
|
16
|
-
end
|
9
|
+
#: (ResponseBuilders::CollectionResponseBuilder[Interface::FoldingRange] response_builder, Array[Prism::Comment] comments, Prism::Dispatcher dispatcher) -> void
|
17
10
|
def initialize(response_builder, comments, dispatcher)
|
18
11
|
@response_builder = response_builder
|
19
|
-
@requires =
|
12
|
+
@requires = [] #: Array[Prism::CallNode]
|
20
13
|
@comments = comments
|
21
14
|
|
22
15
|
dispatcher.register(
|
@@ -47,33 +40,33 @@ module RubyLsp
|
|
47
40
|
)
|
48
41
|
end
|
49
42
|
|
50
|
-
|
43
|
+
#: -> void
|
51
44
|
def finalize_response!
|
52
45
|
push_comment_ranges
|
53
46
|
emit_requires_range
|
54
47
|
end
|
55
48
|
|
56
|
-
|
49
|
+
#: (Prism::IfNode node) -> void
|
57
50
|
def on_if_node_enter(node)
|
58
51
|
add_statements_range(node)
|
59
52
|
end
|
60
53
|
|
61
|
-
|
54
|
+
#: (Prism::InNode node) -> void
|
62
55
|
def on_in_node_enter(node)
|
63
56
|
add_statements_range(node)
|
64
57
|
end
|
65
58
|
|
66
|
-
|
59
|
+
#: (Prism::RescueNode node) -> void
|
67
60
|
def on_rescue_node_enter(node)
|
68
61
|
add_statements_range(node)
|
69
62
|
end
|
70
63
|
|
71
|
-
|
64
|
+
#: (Prism::WhenNode node) -> void
|
72
65
|
def on_when_node_enter(node)
|
73
66
|
add_statements_range(node)
|
74
67
|
end
|
75
68
|
|
76
|
-
|
69
|
+
#: (Prism::InterpolatedStringNode node) -> void
|
77
70
|
def on_interpolated_string_node_enter(node)
|
78
71
|
opening_loc = node.opening_loc || node.location
|
79
72
|
closing_loc = node.closing_loc || node.parts.last&.location || node.location
|
@@ -81,82 +74,82 @@ module RubyLsp
|
|
81
74
|
add_lines_range(opening_loc.start_line, closing_loc.start_line - 1)
|
82
75
|
end
|
83
76
|
|
84
|
-
|
77
|
+
#: (Prism::ArrayNode node) -> void
|
85
78
|
def on_array_node_enter(node)
|
86
79
|
add_simple_range(node)
|
87
80
|
end
|
88
81
|
|
89
|
-
|
82
|
+
#: (Prism::BlockNode node) -> void
|
90
83
|
def on_block_node_enter(node)
|
91
84
|
add_simple_range(node)
|
92
85
|
end
|
93
86
|
|
94
|
-
|
87
|
+
#: (Prism::CaseNode node) -> void
|
95
88
|
def on_case_node_enter(node)
|
96
89
|
add_simple_range(node)
|
97
90
|
end
|
98
91
|
|
99
|
-
|
92
|
+
#: (Prism::CaseMatchNode node) -> void
|
100
93
|
def on_case_match_node_enter(node)
|
101
94
|
add_simple_range(node)
|
102
95
|
end
|
103
96
|
|
104
|
-
|
97
|
+
#: (Prism::ClassNode node) -> void
|
105
98
|
def on_class_node_enter(node)
|
106
99
|
add_simple_range(node)
|
107
100
|
end
|
108
101
|
|
109
|
-
|
102
|
+
#: (Prism::ModuleNode node) -> void
|
110
103
|
def on_module_node_enter(node)
|
111
104
|
add_simple_range(node)
|
112
105
|
end
|
113
106
|
|
114
|
-
|
107
|
+
#: (Prism::ForNode node) -> void
|
115
108
|
def on_for_node_enter(node)
|
116
109
|
add_simple_range(node)
|
117
110
|
end
|
118
111
|
|
119
|
-
|
112
|
+
#: (Prism::HashNode node) -> void
|
120
113
|
def on_hash_node_enter(node)
|
121
114
|
add_simple_range(node)
|
122
115
|
end
|
123
116
|
|
124
|
-
|
117
|
+
#: (Prism::SingletonClassNode node) -> void
|
125
118
|
def on_singleton_class_node_enter(node)
|
126
119
|
add_simple_range(node)
|
127
120
|
end
|
128
121
|
|
129
|
-
|
122
|
+
#: (Prism::UnlessNode node) -> void
|
130
123
|
def on_unless_node_enter(node)
|
131
124
|
add_simple_range(node)
|
132
125
|
end
|
133
126
|
|
134
|
-
|
127
|
+
#: (Prism::UntilNode node) -> void
|
135
128
|
def on_until_node_enter(node)
|
136
129
|
add_simple_range(node)
|
137
130
|
end
|
138
131
|
|
139
|
-
|
132
|
+
#: (Prism::WhileNode node) -> void
|
140
133
|
def on_while_node_enter(node)
|
141
134
|
add_simple_range(node)
|
142
135
|
end
|
143
136
|
|
144
|
-
|
137
|
+
#: (Prism::ElseNode node) -> void
|
145
138
|
def on_else_node_enter(node)
|
146
139
|
add_simple_range(node)
|
147
140
|
end
|
148
141
|
|
149
|
-
|
142
|
+
#: (Prism::EnsureNode node) -> void
|
150
143
|
def on_ensure_node_enter(node)
|
151
144
|
add_simple_range(node)
|
152
145
|
end
|
153
146
|
|
154
|
-
|
147
|
+
#: (Prism::BeginNode node) -> void
|
155
148
|
def on_begin_node_enter(node)
|
156
149
|
add_simple_range(node)
|
157
150
|
end
|
158
151
|
|
159
|
-
|
152
|
+
#: (Prism::DefNode node) -> void
|
160
153
|
def on_def_node_enter(node)
|
161
154
|
params = node.parameters
|
162
155
|
parameter_loc = params&.location
|
@@ -171,7 +164,7 @@ module RubyLsp
|
|
171
164
|
end
|
172
165
|
end
|
173
166
|
|
174
|
-
|
167
|
+
#: (Prism::CallNode node) -> void
|
175
168
|
def on_call_node_enter(node)
|
176
169
|
# If we find a require, don't visit the child nodes (prevent `super`), so that we can keep accumulating into
|
177
170
|
# the `@requires` array and then push the range whenever we find a node that isn't a CallNode
|
@@ -184,14 +177,14 @@ module RubyLsp
|
|
184
177
|
add_lines_range(location.start_line, location.end_line - 1)
|
185
178
|
end
|
186
179
|
|
187
|
-
|
180
|
+
#: (Prism::LambdaNode node) -> void
|
188
181
|
def on_lambda_node_enter(node)
|
189
182
|
add_simple_range(node)
|
190
183
|
end
|
191
184
|
|
192
185
|
private
|
193
186
|
|
194
|
-
|
187
|
+
#: -> void
|
195
188
|
def push_comment_ranges
|
196
189
|
# Group comments that are on consecutive lines and then push ranges for each group that has at least 2 comments
|
197
190
|
@comments.chunk_while do |this, other|
|
@@ -207,7 +200,7 @@ module RubyLsp
|
|
207
200
|
end
|
208
201
|
end
|
209
202
|
|
210
|
-
|
203
|
+
#: -> void
|
211
204
|
def emit_requires_range
|
212
205
|
if @requires.length > 1
|
213
206
|
@response_builder << Interface::FoldingRange.new(
|
@@ -220,7 +213,7 @@ module RubyLsp
|
|
220
213
|
@requires.clear
|
221
214
|
end
|
222
215
|
|
223
|
-
|
216
|
+
#: (Prism::CallNode node) -> bool
|
224
217
|
def require?(node)
|
225
218
|
message = node.message
|
226
219
|
return false unless message == "require" || message == "require_relative"
|
@@ -234,7 +227,7 @@ module RubyLsp
|
|
234
227
|
arguments.length == 1 && arguments.first.is_a?(Prism::StringNode)
|
235
228
|
end
|
236
229
|
|
237
|
-
|
230
|
+
#: ((Prism::IfNode | Prism::InNode | Prism::RescueNode | Prism::WhenNode) node) -> void
|
238
231
|
def add_statements_range(node)
|
239
232
|
statements = node.statements
|
240
233
|
return unless statements
|
@@ -245,13 +238,13 @@ module RubyLsp
|
|
245
238
|
add_lines_range(node.location.start_line, statement.location.end_line)
|
246
239
|
end
|
247
240
|
|
248
|
-
|
241
|
+
#: (Prism::Node node) -> void
|
249
242
|
def add_simple_range(node)
|
250
243
|
location = node.location
|
251
244
|
add_lines_range(location.start_line, location.end_line - 1)
|
252
245
|
end
|
253
246
|
|
254
|
-
|
247
|
+
#: (Integer start_line, Integer end_line) -> void
|
255
248
|
def add_lines_range(start_line, end_line)
|
256
249
|
emit_requires_range
|
257
250
|
return if start_line >= end_line
|
@@ -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, RubyDocument::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,17 +84,17 @@ 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
99
|
return if @sorbet_level != RubyDocument::SorbetLevel::Ignore
|
116
100
|
|
@@ -120,14 +104,14 @@ 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
109
|
return if @sorbet_level != RubyDocument::SorbetLevel::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
116
|
return if @sorbet_level != RubyDocument::SorbetLevel::Ignore
|
133
117
|
|
@@ -137,7 +121,7 @@ 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)
|
@@ -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,7 +280,7 @@ 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
286
|
return if sorbet_level_true_or_higher?(@sorbet_level)
|
@@ -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
|
@@ -330,7 +314,7 @@ 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
|
@@ -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,7 +358,7 @@ 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
|
@@ -389,7 +373,7 @@ module RubyLsp
|
|
389
373
|
end
|
390
374
|
end
|
391
375
|
|
392
|
-
|
376
|
+
#: (Prism::CallNode node) -> void
|
393
377
|
def generate_gem_hover(node)
|
394
378
|
first_argument = node.arguments&.arguments&.first
|
395
379
|
return unless first_argument.is_a?(Prism::StringNode)
|
@@ -397,14 +381,11 @@ module RubyLsp
|
|
397
381
|
spec = Gem::Specification.find_by_name(first_argument.content)
|
398
382
|
return unless spec
|
399
383
|
|
400
|
-
info =
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
].find { |text| !text.nil? && !text.empty? },
|
406
|
-
String,
|
407
|
-
)
|
384
|
+
info = [
|
385
|
+
spec.description,
|
386
|
+
spec.summary,
|
387
|
+
"This rubygem does not have a description or summary.",
|
388
|
+
].find { |text| !text.nil? && !text.empty? } #: String
|
408
389
|
|
409
390
|
# Remove leading whitespace if a heredoc was used for the summary or description
|
410
391
|
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
|
|