ruby-lsp 0.21.2 → 0.21.3
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/VERSION +1 -1
- data/lib/ruby_lsp/global_state.rb +9 -0
- data/lib/ruby_lsp/listeners/document_highlight.rb +91 -4
- data/lib/ruby_lsp/requests/document_highlight.rb +7 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f580352765054aabd1821330dab6fa4ce5fb65746dee3a96640589a511a047f0
|
4
|
+
data.tar.gz: 41b51b6a3c13116b64a116f50337df14624088d8c50b2d5675c753b0ae612220
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6801b771e4aec3f493211f8b50c5c6e2998cd7d2ff1061bbc8e7afb83c87e653fcf7dfd23c3b41ec2fa65cd1d1eec3fab840a9188936904c08c6f2745c12c5a8
|
7
|
+
data.tar.gz: 9b68fee2853275c1343fa2815c6fe4263e6c90277b5e6567dfb84d4e0dd9d112353d77f18055384d9cb9aeb6a263ce8ec1b4b66f8b1eb2950f800aedf73fba3a
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.21.
|
1
|
+
0.21.3
|
@@ -53,6 +53,7 @@ module RubyLsp
|
|
53
53
|
T::Boolean,
|
54
54
|
)
|
55
55
|
@client_capabilities = T.let(ClientCapabilities.new, ClientCapabilities)
|
56
|
+
@enabled_feature_flags = T.let({}, T::Hash[Symbol, T::Boolean])
|
56
57
|
end
|
57
58
|
|
58
59
|
sig { params(addon_name: String).returns(T.nilable(T::Hash[Symbol, T.untyped])) }
|
@@ -139,9 +140,17 @@ module RubyLsp
|
|
139
140
|
@addon_settings.merge!(addon_settings)
|
140
141
|
end
|
141
142
|
|
143
|
+
enabled_flags = options.dig(:initializationOptions, :enabledFeatureFlags)
|
144
|
+
@enabled_feature_flags = enabled_flags if enabled_flags
|
145
|
+
|
142
146
|
notifications
|
143
147
|
end
|
144
148
|
|
149
|
+
sig { params(flag: Symbol).returns(T.nilable(T::Boolean)) }
|
150
|
+
def enabled_feature?(flag)
|
151
|
+
@enabled_feature_flags[flag]
|
152
|
+
end
|
153
|
+
|
145
154
|
sig { returns(String) }
|
146
155
|
def workspace_path
|
147
156
|
T.must(@workspace_uri.to_standardized_path)
|
@@ -92,14 +92,15 @@ module RubyLsp
|
|
92
92
|
target: T.nilable(Prism::Node),
|
93
93
|
parent: T.nilable(Prism::Node),
|
94
94
|
dispatcher: Prism::Dispatcher,
|
95
|
+
position: T::Hash[Symbol, T.untyped],
|
95
96
|
).void
|
96
97
|
end
|
97
|
-
def initialize(response_builder, target, parent, dispatcher)
|
98
|
+
def initialize(response_builder, target, parent, dispatcher, position)
|
98
99
|
@response_builder = response_builder
|
99
100
|
|
100
101
|
return unless target && parent
|
101
102
|
|
102
|
-
highlight_target =
|
103
|
+
highlight_target, highlight_target_value =
|
103
104
|
case target
|
104
105
|
when Prism::GlobalVariableReadNode, Prism::GlobalVariableAndWriteNode, Prism::GlobalVariableOperatorWriteNode,
|
105
106
|
Prism::GlobalVariableOrWriteNode, Prism::GlobalVariableTargetNode, Prism::GlobalVariableWriteNode,
|
@@ -116,13 +117,17 @@ module RubyLsp
|
|
116
117
|
Prism::CallNode, Prism::BlockParameterNode, Prism::RequiredKeywordParameterNode,
|
117
118
|
Prism::RequiredKeywordParameterNode, Prism::KeywordRestParameterNode, Prism::OptionalParameterNode,
|
118
119
|
Prism::RequiredParameterNode, Prism::RestParameterNode
|
120
|
+
[target, node_value(target)]
|
121
|
+
when Prism::ModuleNode, Prism::ClassNode, Prism::SingletonClassNode, Prism::DefNode, Prism::CaseNode,
|
122
|
+
Prism::WhileNode, Prism::UntilNode, Prism::ForNode, Prism::IfNode, Prism::UnlessNode
|
119
123
|
target
|
120
124
|
end
|
121
125
|
|
122
126
|
@target = T.let(highlight_target, T.nilable(Prism::Node))
|
123
|
-
@target_value = T.let(
|
127
|
+
@target_value = T.let(highlight_target_value, T.nilable(String))
|
128
|
+
@target_position = position
|
124
129
|
|
125
|
-
if @target
|
130
|
+
if @target
|
126
131
|
dispatcher.register(
|
127
132
|
self,
|
128
133
|
:on_call_node_enter,
|
@@ -172,6 +177,13 @@ module RubyLsp
|
|
172
177
|
:on_global_variable_or_write_node_enter,
|
173
178
|
:on_global_variable_and_write_node_enter,
|
174
179
|
:on_global_variable_operator_write_node_enter,
|
180
|
+
:on_singleton_class_node_enter,
|
181
|
+
:on_case_node_enter,
|
182
|
+
:on_while_node_enter,
|
183
|
+
:on_until_node_enter,
|
184
|
+
:on_for_node_enter,
|
185
|
+
:on_if_node_enter,
|
186
|
+
:on_unless_node_enter,
|
175
187
|
)
|
176
188
|
end
|
177
189
|
end
|
@@ -189,6 +201,8 @@ module RubyLsp
|
|
189
201
|
|
190
202
|
sig { params(node: Prism::DefNode).void }
|
191
203
|
def on_def_node_enter(node)
|
204
|
+
add_matching_end_highlights(node.def_keyword_loc, node.end_keyword_loc) if @target.is_a?(Prism::DefNode)
|
205
|
+
|
192
206
|
return unless matches?(node, [Prism::CallNode, Prism::DefNode])
|
193
207
|
|
194
208
|
add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
|
@@ -252,6 +266,8 @@ module RubyLsp
|
|
252
266
|
|
253
267
|
sig { params(node: Prism::ClassNode).void }
|
254
268
|
def on_class_node_enter(node)
|
269
|
+
add_matching_end_highlights(node.class_keyword_loc, node.end_keyword_loc) if @target.is_a?(Prism::ClassNode)
|
270
|
+
|
255
271
|
return unless matches?(node, CONSTANT_NODES + CONSTANT_PATH_NODES + [Prism::ClassNode])
|
256
272
|
|
257
273
|
add_highlight(Constant::DocumentHighlightKind::WRITE, node.constant_path.location)
|
@@ -259,6 +275,8 @@ module RubyLsp
|
|
259
275
|
|
260
276
|
sig { params(node: Prism::ModuleNode).void }
|
261
277
|
def on_module_node_enter(node)
|
278
|
+
add_matching_end_highlights(node.module_keyword_loc, node.end_keyword_loc) if @target.is_a?(Prism::ModuleNode)
|
279
|
+
|
262
280
|
return unless matches?(node, CONSTANT_NODES + CONSTANT_PATH_NODES + [Prism::ModuleNode])
|
263
281
|
|
264
282
|
add_highlight(Constant::DocumentHighlightKind::WRITE, node.constant_path.location)
|
@@ -511,6 +529,55 @@ module RubyLsp
|
|
511
529
|
add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
|
512
530
|
end
|
513
531
|
|
532
|
+
sig { params(node: Prism::SingletonClassNode).void }
|
533
|
+
def on_singleton_class_node_enter(node)
|
534
|
+
return unless @target.is_a?(Prism::SingletonClassNode)
|
535
|
+
|
536
|
+
add_matching_end_highlights(node.class_keyword_loc, node.end_keyword_loc)
|
537
|
+
end
|
538
|
+
|
539
|
+
sig { params(node: Prism::CaseNode).void }
|
540
|
+
def on_case_node_enter(node)
|
541
|
+
return unless @target.is_a?(Prism::CaseNode)
|
542
|
+
|
543
|
+
add_matching_end_highlights(node.case_keyword_loc, node.end_keyword_loc)
|
544
|
+
end
|
545
|
+
|
546
|
+
sig { params(node: Prism::WhileNode).void }
|
547
|
+
def on_while_node_enter(node)
|
548
|
+
return unless @target.is_a?(Prism::WhileNode)
|
549
|
+
|
550
|
+
add_matching_end_highlights(node.keyword_loc, node.closing_loc)
|
551
|
+
end
|
552
|
+
|
553
|
+
sig { params(node: Prism::UntilNode).void }
|
554
|
+
def on_until_node_enter(node)
|
555
|
+
return unless @target.is_a?(Prism::UntilNode)
|
556
|
+
|
557
|
+
add_matching_end_highlights(node.keyword_loc, node.closing_loc)
|
558
|
+
end
|
559
|
+
|
560
|
+
sig { params(node: Prism::ForNode).void }
|
561
|
+
def on_for_node_enter(node)
|
562
|
+
return unless @target.is_a?(Prism::ForNode)
|
563
|
+
|
564
|
+
add_matching_end_highlights(node.for_keyword_loc, node.end_keyword_loc)
|
565
|
+
end
|
566
|
+
|
567
|
+
sig { params(node: Prism::IfNode).void }
|
568
|
+
def on_if_node_enter(node)
|
569
|
+
return unless @target.is_a?(Prism::IfNode)
|
570
|
+
|
571
|
+
add_matching_end_highlights(node.if_keyword_loc, node.end_keyword_loc)
|
572
|
+
end
|
573
|
+
|
574
|
+
sig { params(node: Prism::UnlessNode).void }
|
575
|
+
def on_unless_node_enter(node)
|
576
|
+
return unless @target.is_a?(Prism::UnlessNode)
|
577
|
+
|
578
|
+
add_matching_end_highlights(node.keyword_loc, node.end_keyword_loc)
|
579
|
+
end
|
580
|
+
|
514
581
|
private
|
515
582
|
|
516
583
|
sig { params(node: Prism::Node, classes: T::Array[T.class_of(Prism::Node)]).returns(T.nilable(T::Boolean)) }
|
@@ -550,6 +617,26 @@ module RubyLsp
|
|
550
617
|
node.constant_path.slice
|
551
618
|
end
|
552
619
|
end
|
620
|
+
|
621
|
+
sig { params(keyword_loc: T.nilable(Prism::Location), end_loc: T.nilable(Prism::Location)).void }
|
622
|
+
def add_matching_end_highlights(keyword_loc, end_loc)
|
623
|
+
return unless keyword_loc && end_loc && end_loc.length.positive?
|
624
|
+
return unless covers_target_position?(keyword_loc) || covers_target_position?(end_loc)
|
625
|
+
|
626
|
+
add_highlight(Constant::DocumentHighlightKind::TEXT, keyword_loc)
|
627
|
+
add_highlight(Constant::DocumentHighlightKind::TEXT, end_loc)
|
628
|
+
end
|
629
|
+
|
630
|
+
sig { params(location: Prism::Location).returns(T::Boolean) }
|
631
|
+
def covers_target_position?(location)
|
632
|
+
start_line = location.start_line - 1
|
633
|
+
end_line = location.end_line - 1
|
634
|
+
start_covered = start_line < @target_position[:line] ||
|
635
|
+
(start_line == @target_position[:line] && location.start_column <= @target_position[:character])
|
636
|
+
end_covered = end_line > @target_position[:line] ||
|
637
|
+
(end_line == @target_position[:line] && location.end_column >= @target_position[:character])
|
638
|
+
start_covered && end_covered
|
639
|
+
end
|
553
640
|
end
|
554
641
|
end
|
555
642
|
end
|
@@ -38,7 +38,13 @@ module RubyLsp
|
|
38
38
|
ResponseBuilders::CollectionResponseBuilder[Interface::DocumentHighlight].new,
|
39
39
|
ResponseBuilders::CollectionResponseBuilder[Interface::DocumentHighlight],
|
40
40
|
)
|
41
|
-
Listeners::DocumentHighlight.new(
|
41
|
+
Listeners::DocumentHighlight.new(
|
42
|
+
@response_builder,
|
43
|
+
node_context.node,
|
44
|
+
node_context.parent,
|
45
|
+
dispatcher,
|
46
|
+
position,
|
47
|
+
)
|
42
48
|
end
|
43
49
|
|
44
50
|
sig { override.returns(T::Array[Interface::DocumentHighlight]) }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-lsp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.21.
|
4
|
+
version: 0.21.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shopify
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: language_server-protocol
|