ruby-lsp 0.21.1 → 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/client_capabilities.rb +8 -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
- data/lib/ruby_lsp/server.rb +22 -43
- data/lib/ruby_lsp/store.rb +0 -4
- data/lib/ruby_lsp/utils.rb +55 -0
- 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
|
|
@@ -10,7 +10,8 @@ module RubyLsp
|
|
|
10
10
|
sig { returns(T::Boolean) }
|
|
11
11
|
attr_reader :supports_watching_files,
|
|
12
12
|
:supports_request_delegation,
|
|
13
|
-
:window_show_message_supports_extra_properties
|
|
13
|
+
:window_show_message_supports_extra_properties,
|
|
14
|
+
:supports_progress
|
|
14
15
|
|
|
15
16
|
sig { void }
|
|
16
17
|
def initialize
|
|
@@ -28,6 +29,9 @@ module RubyLsp
|
|
|
28
29
|
|
|
29
30
|
# Which resource operations the editor supports, like renaming files
|
|
30
31
|
@supported_resource_operations = T.let([], T::Array[String])
|
|
32
|
+
|
|
33
|
+
# The editor supports displaying progress requests
|
|
34
|
+
@supports_progress = T.let(false, T::Boolean)
|
|
31
35
|
end
|
|
32
36
|
|
|
33
37
|
sig { params(capabilities: T::Hash[Symbol, T.untyped]).void }
|
|
@@ -50,6 +54,9 @@ module RubyLsp
|
|
|
50
54
|
:additionalPropertiesSupport,
|
|
51
55
|
)
|
|
52
56
|
@window_show_message_supports_extra_properties = supports_additional_properties || false
|
|
57
|
+
|
|
58
|
+
progress = capabilities.dig(:window, :workDoneProgress)
|
|
59
|
+
@supports_progress = progress if progress
|
|
53
60
|
end
|
|
54
61
|
|
|
55
62
|
sig { returns(T::Boolean) }
|
|
@@ -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]) }
|
data/lib/ruby_lsp/server.rb
CHANGED
|
@@ -81,8 +81,6 @@ module RubyLsp
|
|
|
81
81
|
workspace_did_change_watched_files(message)
|
|
82
82
|
when "workspace/symbol"
|
|
83
83
|
workspace_symbol(message)
|
|
84
|
-
when "window/showMessageRequest"
|
|
85
|
-
window_show_message_request(message)
|
|
86
84
|
when "rubyLsp/textDocument/showSyntaxTree"
|
|
87
85
|
text_document_show_syntax_tree(message)
|
|
88
86
|
when "rubyLsp/workspace/dependencies"
|
|
@@ -108,6 +106,8 @@ module RubyLsp
|
|
|
108
106
|
)
|
|
109
107
|
when "$/cancelRequest"
|
|
110
108
|
@mutex.synchronize { @cancelled_requests << message[:params][:id] }
|
|
109
|
+
when nil
|
|
110
|
+
process_response(message) if message[:result]
|
|
111
111
|
end
|
|
112
112
|
rescue DelegateRequestError
|
|
113
113
|
send_message(Error.new(id: message[:id], code: DelegateRequestError::CODE, message: "DELEGATE_REQUEST"))
|
|
@@ -140,6 +140,15 @@ module RubyLsp
|
|
|
140
140
|
send_log_message("Error processing #{message[:method]}: #{e.full_message}", type: Constant::MessageType::ERROR)
|
|
141
141
|
end
|
|
142
142
|
|
|
143
|
+
# Process responses to requests that were sent to the client
|
|
144
|
+
sig { params(message: T::Hash[Symbol, T.untyped]).void }
|
|
145
|
+
def process_response(message)
|
|
146
|
+
case message.dig(:result, :method)
|
|
147
|
+
when "window/showMessageRequest"
|
|
148
|
+
window_show_message_request(message)
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
143
152
|
sig { params(include_project_addons: T::Boolean).void }
|
|
144
153
|
def load_addons(include_project_addons: true)
|
|
145
154
|
# If invoking Bundler.setup failed, then the load path will not be configured properly and trying to load add-ons
|
|
@@ -188,8 +197,6 @@ module RubyLsp
|
|
|
188
197
|
client_name = options.dig(:clientInfo, :name)
|
|
189
198
|
@store.client_name = client_name if client_name
|
|
190
199
|
|
|
191
|
-
progress = options.dig(:capabilities, :window, :workDoneProgress)
|
|
192
|
-
@store.supports_progress = progress.nil? ? true : progress
|
|
193
200
|
configured_features = options.dig(:initializationOptions, :enabledFeatures)
|
|
194
201
|
|
|
195
202
|
configured_hints = options.dig(:initializationOptions, :featuresConfiguration, :inlayHint)
|
|
@@ -1105,7 +1112,7 @@ module RubyLsp
|
|
|
1105
1112
|
|
|
1106
1113
|
sig { params(id: String, title: String, percentage: Integer).void }
|
|
1107
1114
|
def begin_progress(id, title, percentage: 0)
|
|
1108
|
-
return unless @
|
|
1115
|
+
return unless @global_state.client_capabilities.supports_progress
|
|
1109
1116
|
|
|
1110
1117
|
send_message(Request.new(
|
|
1111
1118
|
id: @current_request_id,
|
|
@@ -1113,52 +1120,21 @@ module RubyLsp
|
|
|
1113
1120
|
params: Interface::WorkDoneProgressCreateParams.new(token: id),
|
|
1114
1121
|
))
|
|
1115
1122
|
|
|
1116
|
-
send_message(Notification.
|
|
1117
|
-
method: "$/progress",
|
|
1118
|
-
params: Interface::ProgressParams.new(
|
|
1119
|
-
token: id,
|
|
1120
|
-
value: Interface::WorkDoneProgressBegin.new(
|
|
1121
|
-
kind: "begin",
|
|
1122
|
-
title: title,
|
|
1123
|
-
percentage: percentage,
|
|
1124
|
-
message: "#{percentage}% completed",
|
|
1125
|
-
),
|
|
1126
|
-
),
|
|
1127
|
-
))
|
|
1123
|
+
send_message(Notification.progress_begin(id, title, percentage: percentage, message: "#{percentage}% completed"))
|
|
1128
1124
|
end
|
|
1129
1125
|
|
|
1130
1126
|
sig { params(id: String, percentage: Integer).void }
|
|
1131
1127
|
def progress(id, percentage)
|
|
1132
|
-
return unless @
|
|
1128
|
+
return unless @global_state.client_capabilities.supports_progress
|
|
1133
1129
|
|
|
1134
|
-
send_message(
|
|
1135
|
-
Notification.new(
|
|
1136
|
-
method: "$/progress",
|
|
1137
|
-
params: Interface::ProgressParams.new(
|
|
1138
|
-
token: id,
|
|
1139
|
-
value: Interface::WorkDoneProgressReport.new(
|
|
1140
|
-
kind: "report",
|
|
1141
|
-
percentage: percentage,
|
|
1142
|
-
message: "#{percentage}% completed",
|
|
1143
|
-
),
|
|
1144
|
-
),
|
|
1145
|
-
),
|
|
1146
|
-
)
|
|
1130
|
+
send_message(Notification.progress_report(id, percentage: percentage, message: "#{percentage}% completed"))
|
|
1147
1131
|
end
|
|
1148
1132
|
|
|
1149
1133
|
sig { params(id: String).void }
|
|
1150
1134
|
def end_progress(id)
|
|
1151
|
-
return unless @
|
|
1135
|
+
return unless @global_state.client_capabilities.supports_progress
|
|
1152
1136
|
|
|
1153
|
-
send_message(
|
|
1154
|
-
Notification.new(
|
|
1155
|
-
method: "$/progress",
|
|
1156
|
-
params: Interface::ProgressParams.new(
|
|
1157
|
-
token: id,
|
|
1158
|
-
value: Interface::WorkDoneProgressEnd.new(kind: "end"),
|
|
1159
|
-
),
|
|
1160
|
-
),
|
|
1161
|
-
)
|
|
1137
|
+
send_message(Notification.progress_end(id))
|
|
1162
1138
|
rescue ClosedQueueError
|
|
1163
1139
|
# If the server was killed and the message queue is already closed, there's no way to end the progress
|
|
1164
1140
|
# notification
|
|
@@ -1226,11 +1202,14 @@ module RubyLsp
|
|
|
1226
1202
|
|
|
1227
1203
|
sig { params(message: T::Hash[Symbol, T.untyped]).void }
|
|
1228
1204
|
def window_show_message_request(message)
|
|
1229
|
-
|
|
1205
|
+
result = message[:result]
|
|
1206
|
+
return unless result
|
|
1207
|
+
|
|
1208
|
+
addon_name = result[:addon_name]
|
|
1230
1209
|
addon = Addon.addons.find { |addon| addon.name == addon_name }
|
|
1231
1210
|
return unless addon
|
|
1232
1211
|
|
|
1233
|
-
addon.handle_window_show_message_response(
|
|
1212
|
+
addon.handle_window_show_message_response(result[:title])
|
|
1234
1213
|
end
|
|
1235
1214
|
end
|
|
1236
1215
|
end
|
data/lib/ruby_lsp/store.rb
CHANGED
|
@@ -7,9 +7,6 @@ module RubyLsp
|
|
|
7
7
|
|
|
8
8
|
class NonExistingDocumentError < StandardError; end
|
|
9
9
|
|
|
10
|
-
sig { returns(T::Boolean) }
|
|
11
|
-
attr_accessor :supports_progress
|
|
12
|
-
|
|
13
10
|
sig { returns(T::Hash[Symbol, RequestConfig]) }
|
|
14
11
|
attr_accessor :features_configuration
|
|
15
12
|
|
|
@@ -19,7 +16,6 @@ module RubyLsp
|
|
|
19
16
|
sig { void }
|
|
20
17
|
def initialize
|
|
21
18
|
@state = T.let({}, T::Hash[String, Document[T.untyped]])
|
|
22
|
-
@supports_progress = T.let(true, T::Boolean)
|
|
23
19
|
@features_configuration = T.let(
|
|
24
20
|
{
|
|
25
21
|
inlayHint: RequestConfig.new({
|
data/lib/ruby_lsp/utils.rb
CHANGED
|
@@ -87,6 +87,61 @@ module RubyLsp
|
|
|
87
87
|
params: data,
|
|
88
88
|
)
|
|
89
89
|
end
|
|
90
|
+
|
|
91
|
+
sig do
|
|
92
|
+
params(
|
|
93
|
+
id: String,
|
|
94
|
+
title: String,
|
|
95
|
+
percentage: T.nilable(Integer),
|
|
96
|
+
message: T.nilable(String),
|
|
97
|
+
).returns(Notification)
|
|
98
|
+
end
|
|
99
|
+
def progress_begin(id, title, percentage: nil, message: nil)
|
|
100
|
+
new(
|
|
101
|
+
method: "$/progress",
|
|
102
|
+
params: Interface::ProgressParams.new(
|
|
103
|
+
token: id,
|
|
104
|
+
value: Interface::WorkDoneProgressBegin.new(
|
|
105
|
+
kind: "begin",
|
|
106
|
+
title: title,
|
|
107
|
+
percentage: percentage,
|
|
108
|
+
message: message,
|
|
109
|
+
),
|
|
110
|
+
),
|
|
111
|
+
)
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
sig do
|
|
115
|
+
params(
|
|
116
|
+
id: String,
|
|
117
|
+
percentage: T.nilable(Integer),
|
|
118
|
+
message: T.nilable(String),
|
|
119
|
+
).returns(Notification)
|
|
120
|
+
end
|
|
121
|
+
def progress_report(id, percentage: nil, message: nil)
|
|
122
|
+
new(
|
|
123
|
+
method: "$/progress",
|
|
124
|
+
params: Interface::ProgressParams.new(
|
|
125
|
+
token: id,
|
|
126
|
+
value: Interface::WorkDoneProgressReport.new(
|
|
127
|
+
kind: "report",
|
|
128
|
+
percentage: percentage,
|
|
129
|
+
message: message,
|
|
130
|
+
),
|
|
131
|
+
),
|
|
132
|
+
)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
sig { params(id: String).returns(Notification) }
|
|
136
|
+
def progress_end(id)
|
|
137
|
+
Notification.new(
|
|
138
|
+
method: "$/progress",
|
|
139
|
+
params: Interface::ProgressParams.new(
|
|
140
|
+
token: id,
|
|
141
|
+
value: Interface::WorkDoneProgressEnd.new(kind: "end"),
|
|
142
|
+
),
|
|
143
|
+
)
|
|
144
|
+
end
|
|
90
145
|
end
|
|
91
146
|
|
|
92
147
|
extend T::Sig
|
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
|
+
date: 2024-11-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: language_server-protocol
|