ruby-lsp 0.13.4 → 0.14.0
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 +3 -2
- data/VERSION +1 -1
- data/lib/rubocop/cop/ruby_lsp/use_register_with_handler_method.rb +4 -8
- data/lib/ruby_indexer/lib/ruby_indexer/collector.rb +5 -1
- data/lib/ruby_indexer/lib/ruby_indexer/configuration.rb +4 -2
- data/lib/ruby_indexer/lib/ruby_indexer/index.rb +8 -3
- data/lib/ruby_indexer/test/classes_and_modules_test.rb +9 -0
- data/lib/ruby_indexer/test/index_test.rb +27 -0
- data/lib/ruby_lsp/addon.rb +21 -10
- data/lib/ruby_lsp/check_docs.rb +8 -8
- data/lib/ruby_lsp/executor.rb +28 -10
- data/lib/ruby_lsp/internal.rb +1 -1
- data/lib/ruby_lsp/listeners/code_lens.rb +54 -55
- data/lib/ruby_lsp/listeners/completion.rb +17 -16
- data/lib/ruby_lsp/listeners/definition.rb +10 -16
- data/lib/ruby_lsp/listeners/document_highlight.rb +6 -11
- data/lib/ruby_lsp/listeners/document_link.rb +6 -12
- data/lib/ruby_lsp/listeners/document_symbol.rb +95 -55
- data/lib/ruby_lsp/listeners/folding_ranges.rb +19 -23
- data/lib/ruby_lsp/listeners/hover.rb +26 -30
- data/lib/ruby_lsp/listeners/inlay_hints.rb +7 -13
- data/lib/ruby_lsp/listeners/semantic_highlighting.rb +54 -124
- data/lib/ruby_lsp/listeners/signature_help.rb +11 -13
- data/lib/ruby_lsp/requests/code_lens.rb +9 -17
- data/lib/ruby_lsp/requests/completion.rb +7 -9
- data/lib/ruby_lsp/requests/definition.rb +10 -22
- data/lib/ruby_lsp/requests/document_highlight.rb +7 -5
- data/lib/ruby_lsp/requests/document_link.rb +7 -6
- data/lib/ruby_lsp/requests/document_symbol.rb +5 -11
- data/lib/ruby_lsp/requests/folding_ranges.rb +11 -6
- data/lib/ruby_lsp/requests/hover.rb +18 -24
- data/lib/ruby_lsp/requests/inlay_hints.rb +7 -8
- data/lib/ruby_lsp/requests/on_type_formatting.rb +12 -2
- data/lib/ruby_lsp/requests/semantic_highlighting.rb +10 -8
- data/lib/ruby_lsp/requests/signature_help.rb +53 -18
- data/lib/ruby_lsp/requests/support/common.rb +23 -10
- data/lib/ruby_lsp/requests/support/dependency_detector.rb +5 -1
- data/lib/ruby_lsp/requests.rb +0 -1
- data/lib/ruby_lsp/response_builders/collection_response_builder.rb +29 -0
- data/lib/ruby_lsp/response_builders/document_symbol.rb +57 -0
- data/lib/ruby_lsp/response_builders/hover.rb +49 -0
- data/lib/ruby_lsp/response_builders/response_builder.rb +16 -0
- data/lib/ruby_lsp/response_builders/semantic_highlighting.rb +199 -0
- data/lib/ruby_lsp/response_builders/signature_help.rb +28 -0
- data/lib/ruby_lsp/response_builders.rb +13 -0
- data/lib/ruby_lsp/server.rb +3 -3
- data/lib/ruby_lsp/setup_bundler.rb +30 -5
- data/lib/ruby_lsp/store.rb +4 -4
- metadata +12 -7
- data/lib/ruby_lsp/listener.rb +0 -33
- data/lib/ruby_lsp/requests/support/semantic_token_encoder.rb +0 -73
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 846e8dec07f2ef860ee536f5031df7d38b43d60fa920edd8858d3231aea8dfdc
|
4
|
+
data.tar.gz: 423fe5ec4630332897a9a691c5fb7349c1c2f31e017fa1d5bbdc07a95f0c616d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa20b2be3ee98080569821635324953270b40986c914c57737239e8879175ad3a31bb76094e27518249e6388d366575d0cef76a762cb108136fb54d1b47fe897
|
7
|
+
data.tar.gz: 5e3cd7e882c998001234cce3b08124148c4bffbf6b223d57b6eca9cef5d9128c2b8d460161fb1b4bbf13e77c9f2360cb98a903a24b82e739b754bf9e08b1ca00
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
[](https://github.com/Shopify/ruby-lsp/actions/workflows/ci.yml)
|
2
2
|
[](https://marketplace.visualstudio.com/items?itemName=Shopify.ruby-lsp)
|
3
|
-
[](https://join.slack.com/t/ruby-dx/shared_invite/zt-
|
3
|
+
[](https://join.slack.com/t/ruby-dx/shared_invite/zt-2c8zjlir6-uUDJl8oIwcen_FS_aA~b6Q)
|
4
4
|
|
5
5
|
# Ruby LSP
|
6
6
|
|
@@ -9,7 +9,7 @@ for Ruby, used to improve rich features in editors. It is a part of a wider goal
|
|
9
9
|
experience to Ruby developers using modern standards for cross-editor features, documentation and debugging.
|
10
10
|
|
11
11
|
Want to discuss Ruby developer experience? Consider joining the public
|
12
|
-
[Ruby DX Slack workspace](https://join.slack.com/t/ruby-dx/shared_invite/zt-
|
12
|
+
[Ruby DX Slack workspace](https://join.slack.com/t/ruby-dx/shared_invite/zt-2c8zjlir6-uUDJl8oIwcen_FS_aA~b6Q).
|
13
13
|
|
14
14
|
## Usage
|
15
15
|
|
@@ -83,6 +83,7 @@ features. This is the mechanism that powers addons like
|
|
83
83
|
|
84
84
|
- [Ruby LSP Rails](https://github.com/Shopify/ruby-lsp-rails)
|
85
85
|
- [Ruby LSP RSpec](https://github.com/st0012/ruby-lsp-rspec)
|
86
|
+
- [Ruby LSP rubyfmt](https://github.com/jscharf/ruby-lsp-rubyfmt)
|
86
87
|
|
87
88
|
For instructions on how to create addons, see the [addons documentation](ADDONS.md).
|
88
89
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.14.0
|
@@ -13,9 +13,8 @@ module RuboCop
|
|
13
13
|
# # Register without handler method.
|
14
14
|
#
|
15
15
|
# # bad
|
16
|
-
# class MyListener
|
16
|
+
# class MyListener
|
17
17
|
# def initialize(dispatcher)
|
18
|
-
# super()
|
19
18
|
# dispatcher.register(
|
20
19
|
# self,
|
21
20
|
# :on_string_node_enter,
|
@@ -24,9 +23,8 @@ module RuboCop
|
|
24
23
|
# end
|
25
24
|
#
|
26
25
|
# # good
|
27
|
-
# class MyListener
|
26
|
+
# class MyListener
|
28
27
|
# def initialize(dispatcher)
|
29
|
-
# super()
|
30
28
|
# dispatcher.register(
|
31
29
|
# self,
|
32
30
|
# :on_string_node_enter,
|
@@ -41,9 +39,8 @@ module RuboCop
|
|
41
39
|
# # Handler method without register.
|
42
40
|
#
|
43
41
|
# # bad
|
44
|
-
# class MyListener
|
42
|
+
# class MyListener
|
45
43
|
# def initialize(dispatcher)
|
46
|
-
# super()
|
47
44
|
# dispatcher.register(
|
48
45
|
# self,
|
49
46
|
# )
|
@@ -54,9 +51,8 @@ module RuboCop
|
|
54
51
|
# end
|
55
52
|
#
|
56
53
|
# # good
|
57
|
-
# class MyListener
|
54
|
+
# class MyListener
|
58
55
|
# def initialize(dispatcher)
|
59
|
-
# super()
|
60
56
|
# dispatcher.register(
|
61
57
|
# self,
|
62
58
|
# :on_string_node_enter,
|
@@ -304,7 +304,11 @@ module RubyIndexer
|
|
304
304
|
break unless comment
|
305
305
|
|
306
306
|
comment_content = comment.location.slice.chomp
|
307
|
-
|
307
|
+
|
308
|
+
# invalid encodings would raise an "invalid byte sequence" exception
|
309
|
+
if !comment_content.valid_encoding? || comment_content.match?(RubyIndexer.configuration.magic_comment_regex)
|
310
|
+
next
|
311
|
+
end
|
308
312
|
|
309
313
|
comment_content.delete_prefix!("#")
|
310
314
|
comment_content.delete_prefix!(" ")
|
@@ -192,6 +192,9 @@ module RubyIndexer
|
|
192
192
|
|
193
193
|
# When working on a gem, we need to make sure that its gemspec dependencies can't be excluded. This is necessary
|
194
194
|
# because Bundler doesn't assign groups to gemspec dependencies
|
195
|
+
#
|
196
|
+
# If the dependency is prerelease, `to_spec` may return `nil` due to a bug in older version of Bundler/RubyGems:
|
197
|
+
# https://github.com/Shopify/ruby-lsp/issues/1246
|
195
198
|
this_gem = Bundler.definition.dependencies.find do |d|
|
196
199
|
d.to_spec&.full_gem_path == Dir.pwd
|
197
200
|
rescue Gem::MissingSpecError
|
@@ -203,7 +206,6 @@ module RubyIndexer
|
|
203
206
|
excluded.each do |dependency|
|
204
207
|
next unless dependency.runtime?
|
205
208
|
|
206
|
-
# If the dependency is prerelease, to_spec may return `nil`
|
207
209
|
spec = dependency.to_spec
|
208
210
|
next unless spec
|
209
211
|
|
@@ -213,7 +215,7 @@ module RubyIndexer
|
|
213
215
|
|
214
216
|
# If the transitive dependency is included as a transitive dependency of a gem outside of the development
|
215
217
|
# group, skip it
|
216
|
-
next if others.any? { |d| d.to_spec
|
218
|
+
next if others.any? { |d| d.to_spec&.dependencies&.include?(transitive_dependency) }
|
217
219
|
|
218
220
|
excluded << transitive_dependency
|
219
221
|
end
|
@@ -239,14 +239,19 @@ module RubyIndexer
|
|
239
239
|
|
240
240
|
# Attempts to find a given method for a resolved fully qualified receiver name. Returns `nil` if the method does not
|
241
241
|
# exist on that receiver
|
242
|
-
sig { params(method_name: String, receiver_name: String).returns(T.nilable(Entry::
|
242
|
+
sig { params(method_name: String, receiver_name: String).returns(T.nilable(Entry::Member)) }
|
243
243
|
def resolve_method(method_name, receiver_name)
|
244
|
-
method_entries =
|
244
|
+
method_entries = self[method_name]
|
245
245
|
owner_entries = self[receiver_name]
|
246
246
|
return unless owner_entries && method_entries
|
247
247
|
|
248
248
|
owner_name = T.must(owner_entries.first).name
|
249
|
-
|
249
|
+
T.cast(
|
250
|
+
method_entries.grep(Entry::Member).find do |entry|
|
251
|
+
T.cast(entry, Entry::Member).owner&.name == owner_name
|
252
|
+
end,
|
253
|
+
T.nilable(Entry::Member),
|
254
|
+
)
|
250
255
|
end
|
251
256
|
|
252
257
|
private
|
@@ -168,6 +168,15 @@ module RubyIndexer
|
|
168
168
|
assert_equal("This Bar comment has 1 line padding", bar_entry.comments.join("\n"))
|
169
169
|
end
|
170
170
|
|
171
|
+
def test_skips_comments_containing_invalid_encodings
|
172
|
+
index(<<~RUBY)
|
173
|
+
# comment \xBA
|
174
|
+
class Foo
|
175
|
+
end
|
176
|
+
RUBY
|
177
|
+
assert(@index["Foo"].first)
|
178
|
+
end
|
179
|
+
|
171
180
|
def test_comments_can_be_attached_to_a_namespaced_class
|
172
181
|
index(<<~RUBY)
|
173
182
|
# This is a Foo comment
|
@@ -231,6 +231,33 @@ module RubyIndexer
|
|
231
231
|
assert_equal("Foo::Bar", T.must(entry.owner).name)
|
232
232
|
end
|
233
233
|
|
234
|
+
def test_resolve_method_with_class_name_conflict
|
235
|
+
index(<<~RUBY)
|
236
|
+
class Array
|
237
|
+
end
|
238
|
+
|
239
|
+
class Foo
|
240
|
+
def Array(*args); end
|
241
|
+
end
|
242
|
+
RUBY
|
243
|
+
|
244
|
+
entry = T.must(@index.resolve_method("Array", "Foo"))
|
245
|
+
assert_equal("Array", entry.name)
|
246
|
+
assert_equal("Foo", T.must(entry.owner).name)
|
247
|
+
end
|
248
|
+
|
249
|
+
def test_resolve_method_attribute
|
250
|
+
index(<<~RUBY)
|
251
|
+
class Foo
|
252
|
+
attr_reader :bar
|
253
|
+
end
|
254
|
+
RUBY
|
255
|
+
|
256
|
+
entry = T.must(@index.resolve_method("bar", "Foo"))
|
257
|
+
assert_equal("bar", entry.name)
|
258
|
+
assert_equal("Foo", T.must(entry.owner).name)
|
259
|
+
end
|
260
|
+
|
234
261
|
def test_prefix_search_for_methods
|
235
262
|
index(<<~RUBY)
|
236
263
|
module Foo
|
data/lib/ruby_lsp/addon.rb
CHANGED
@@ -48,8 +48,7 @@ module RubyLsp
|
|
48
48
|
Gem.find_files("ruby_lsp/**/addon.rb").each do |addon|
|
49
49
|
require File.expand_path(addon)
|
50
50
|
rescue => e
|
51
|
-
|
52
|
-
warn(e.backtrace.to_s) # rubocop:disable Lint/RedundantStringCoercion
|
51
|
+
$stderr.puts(e.full_message)
|
53
52
|
end
|
54
53
|
|
55
54
|
# Activate each one of the discovered addons. If any problems occur in the addons, we don't want to
|
@@ -109,39 +108,51 @@ module RubyLsp
|
|
109
108
|
# Creates a new CodeLens listener. This method is invoked on every CodeLens request
|
110
109
|
sig do
|
111
110
|
overridable.params(
|
111
|
+
response_builder: ResponseBuilders::CollectionResponseBuilder[Interface::CodeLens],
|
112
112
|
uri: URI::Generic,
|
113
113
|
dispatcher: Prism::Dispatcher,
|
114
|
-
).
|
114
|
+
).void
|
115
115
|
end
|
116
|
-
def create_code_lens_listener(uri, dispatcher); end
|
116
|
+
def create_code_lens_listener(response_builder, uri, dispatcher); end
|
117
117
|
|
118
118
|
# Creates a new Hover listener. This method is invoked on every Hover request
|
119
119
|
sig do
|
120
120
|
overridable.params(
|
121
|
+
response_builder: ResponseBuilders::Hover,
|
121
122
|
nesting: T::Array[String],
|
122
123
|
index: RubyIndexer::Index,
|
123
124
|
dispatcher: Prism::Dispatcher,
|
124
|
-
).
|
125
|
+
).void
|
125
126
|
end
|
126
|
-
def create_hover_listener(nesting, index, dispatcher); end
|
127
|
+
def create_hover_listener(response_builder, nesting, index, dispatcher); end
|
127
128
|
|
128
129
|
# Creates a new DocumentSymbol listener. This method is invoked on every DocumentSymbol request
|
129
130
|
sig do
|
130
131
|
overridable.params(
|
132
|
+
response_builder: ResponseBuilders::DocumentSymbol,
|
131
133
|
dispatcher: Prism::Dispatcher,
|
132
|
-
).
|
134
|
+
).void
|
133
135
|
end
|
134
|
-
def create_document_symbol_listener(dispatcher); end
|
136
|
+
def create_document_symbol_listener(response_builder, dispatcher); end
|
137
|
+
|
138
|
+
sig do
|
139
|
+
overridable.params(
|
140
|
+
response_builder: ResponseBuilders::SemanticHighlighting,
|
141
|
+
dispatcher: Prism::Dispatcher,
|
142
|
+
).void
|
143
|
+
end
|
144
|
+
def create_semantic_highlighting_listener(response_builder, dispatcher); end
|
135
145
|
|
136
146
|
# Creates a new Definition listener. This method is invoked on every Definition request
|
137
147
|
sig do
|
138
148
|
overridable.params(
|
149
|
+
response_builder: ResponseBuilders::CollectionResponseBuilder[Interface::Location],
|
139
150
|
uri: URI::Generic,
|
140
151
|
nesting: T::Array[String],
|
141
152
|
index: RubyIndexer::Index,
|
142
153
|
dispatcher: Prism::Dispatcher,
|
143
|
-
).
|
154
|
+
).void
|
144
155
|
end
|
145
|
-
def create_definition_listener(uri, nesting, index, dispatcher); end
|
156
|
+
def create_definition_listener(response_builder, uri, nesting, index, dispatcher); end
|
146
157
|
end
|
147
158
|
end
|
data/lib/ruby_lsp/check_docs.rb
CHANGED
@@ -6,7 +6,7 @@ require "objspace"
|
|
6
6
|
|
7
7
|
module RubyLsp
|
8
8
|
# This rake task checks that all requests or addons are fully documented. Add the rake task to your Rakefile and
|
9
|
-
# specify the absolute path for all files that must be required in order to discover all
|
9
|
+
# specify the absolute path for all files that must be required in order to discover all requests and their related
|
10
10
|
# GIFs
|
11
11
|
#
|
12
12
|
# # Rakefile
|
@@ -33,7 +33,7 @@ module RubyLsp
|
|
33
33
|
|
34
34
|
sig { void }
|
35
35
|
def define_task
|
36
|
-
desc("Checks if all Ruby LSP
|
36
|
+
desc("Checks if all Ruby LSP requests are documented")
|
37
37
|
task(@name) { run_task }
|
38
38
|
end
|
39
39
|
|
@@ -46,10 +46,10 @@ module RubyLsp
|
|
46
46
|
|
47
47
|
sig { void }
|
48
48
|
def run_task
|
49
|
-
# Require all files configured to make sure all
|
49
|
+
# Require all files configured to make sure all requests are loaded
|
50
50
|
@file_list.each { |f| require(f.delete_suffix(".rb")) }
|
51
51
|
|
52
|
-
# Find all classes that inherit from BaseRequest
|
52
|
+
# Find all classes that inherit from BaseRequest, which are the ones we want to make sure are
|
53
53
|
# documented
|
54
54
|
features = ObjectSpace.each_object(Class).select do |k|
|
55
55
|
klass = T.unsafe(k)
|
@@ -69,7 +69,7 @@ module RubyLsp
|
|
69
69
|
lines = File.readlines(file_path)
|
70
70
|
docs = []
|
71
71
|
|
72
|
-
# Extract the documentation on top of the
|
72
|
+
# Extract the documentation on top of the request constant
|
73
73
|
while (line = lines[line_number]&.strip) && line.start_with?("#")
|
74
74
|
docs.unshift(line)
|
75
75
|
line_number -= 1
|
@@ -115,8 +115,8 @@ module RubyLsp
|
|
115
115
|
end
|
116
116
|
|
117
117
|
if missing_docs.any?
|
118
|
-
|
119
|
-
The following
|
118
|
+
$stderr.puts(<<~WARN)
|
119
|
+
The following requests are missing documentation:
|
120
120
|
|
121
121
|
#{missing_docs.map { |k, v| "#{k}\n\n#{v.join("\n")}" }.join("\n\n")}
|
122
122
|
WARN
|
@@ -124,7 +124,7 @@ module RubyLsp
|
|
124
124
|
abort
|
125
125
|
end
|
126
126
|
|
127
|
-
puts "All
|
127
|
+
puts "All requests are documented!"
|
128
128
|
end
|
129
129
|
end
|
130
130
|
end
|
data/lib/ruby_lsp/executor.rb
CHANGED
@@ -25,7 +25,7 @@ module RubyLsp
|
|
25
25
|
begin
|
26
26
|
response = run(request)
|
27
27
|
rescue StandardError, LoadError => e
|
28
|
-
|
28
|
+
$stderr.puts(e.full_message)
|
29
29
|
error = e
|
30
30
|
end
|
31
31
|
|
@@ -55,7 +55,7 @@ module RubyLsp
|
|
55
55
|
),
|
56
56
|
)
|
57
57
|
|
58
|
-
|
58
|
+
$stderr.puts(errored_addons.map(&:backtraces).join("\n\n"))
|
59
59
|
end
|
60
60
|
|
61
61
|
RubyVM::YJIT.enable if defined? RubyVM::YJIT.enable
|
@@ -63,7 +63,7 @@ module RubyLsp
|
|
63
63
|
perform_initial_indexing
|
64
64
|
check_formatter_is_available
|
65
65
|
|
66
|
-
|
66
|
+
$stderr.puts("Ruby LSP is ready")
|
67
67
|
VOID
|
68
68
|
when "textDocument/didOpen"
|
69
69
|
text_document_did_open(
|
@@ -99,8 +99,7 @@ module RubyLsp
|
|
99
99
|
folding_range = Requests::FoldingRanges.new(document.parse_result.comments, dispatcher)
|
100
100
|
document_symbol = Requests::DocumentSymbol.new(dispatcher)
|
101
101
|
document_link = Requests::DocumentLink.new(uri, document.comments, dispatcher)
|
102
|
-
|
103
|
-
code_lens = Requests::CodeLens.new(uri, lenses_configuration, dispatcher)
|
102
|
+
code_lens = Requests::CodeLens.new(uri, dispatcher)
|
104
103
|
|
105
104
|
semantic_highlighting = Requests::SemanticHighlighting.new(dispatcher)
|
106
105
|
dispatcher.dispatch(document.tree)
|
@@ -113,7 +112,7 @@ module RubyLsp
|
|
113
112
|
document.cache_set("textDocument/codeLens", code_lens.perform)
|
114
113
|
document.cache_set(
|
115
114
|
"textDocument/semanticTokens/full",
|
116
|
-
|
115
|
+
semantic_highlighting.perform,
|
117
116
|
)
|
118
117
|
document.cache_get(request[:method])
|
119
118
|
when "textDocument/semanticTokens/range"
|
@@ -222,6 +221,8 @@ module RubyLsp
|
|
222
221
|
workspace_symbol(request.dig(:params, :query))
|
223
222
|
when "rubyLsp/textDocument/showSyntaxTree"
|
224
223
|
show_syntax_tree(uri, request.dig(:params, :range))
|
224
|
+
when "rubyLsp/workspace/dependencies"
|
225
|
+
workspace_dependencies
|
225
226
|
else
|
226
227
|
VOID
|
227
228
|
end
|
@@ -252,6 +253,22 @@ module RubyLsp
|
|
252
253
|
VOID
|
253
254
|
end
|
254
255
|
|
256
|
+
sig { returns(T::Array[T::Hash[Symbol, T.untyped]]) }
|
257
|
+
def workspace_dependencies
|
258
|
+
definition = Bundler.definition
|
259
|
+
dep_keys = definition.locked_deps.keys.to_set
|
260
|
+
definition.specs.map do |spec|
|
261
|
+
{
|
262
|
+
name: spec.name,
|
263
|
+
version: spec.version,
|
264
|
+
path: spec.full_gem_path,
|
265
|
+
dependency: dep_keys.include?(spec.name),
|
266
|
+
}
|
267
|
+
end
|
268
|
+
rescue Bundler::GemfileNotFound
|
269
|
+
[]
|
270
|
+
end
|
271
|
+
|
255
272
|
sig { void }
|
256
273
|
def perform_initial_indexing
|
257
274
|
# The begin progress invocation happens during `initialize`, so that the notification is sent before we are
|
@@ -361,7 +378,7 @@ module RubyLsp
|
|
361
378
|
).returns(T::Array[Interface::TextEdit])
|
362
379
|
end
|
363
380
|
def on_type_formatting(uri, position, character)
|
364
|
-
Requests::OnTypeFormatting.new(@store.get(uri), position, character).perform
|
381
|
+
Requests::OnTypeFormatting.new(@store.get(uri), position, character, @store.client_name).perform
|
365
382
|
end
|
366
383
|
|
367
384
|
sig do
|
@@ -431,7 +448,7 @@ module RubyLsp
|
|
431
448
|
request = Requests::SemanticHighlighting.new(dispatcher, range: start_line..end_line)
|
432
449
|
dispatcher.visit(document.tree)
|
433
450
|
|
434
|
-
|
451
|
+
request.perform
|
435
452
|
end
|
436
453
|
|
437
454
|
sig { params(id: String, title: String, percentage: Integer).void }
|
@@ -497,6 +514,9 @@ module RubyLsp
|
|
497
514
|
workspace_uri = options.dig(:workspaceFolders, 0, :uri)
|
498
515
|
@store.workspace_uri = URI(workspace_uri) if workspace_uri
|
499
516
|
|
517
|
+
client_name = options.dig(:clientInfo, :name)
|
518
|
+
@store.client_name = client_name if client_name
|
519
|
+
|
500
520
|
encodings = options.dig(:capabilities, :general, :positionEncodings)
|
501
521
|
@store.encoding = if encodings.nil? || encodings.empty?
|
502
522
|
Constant::PositionEncodingKind::UTF16
|
@@ -519,9 +539,7 @@ module RubyLsp
|
|
519
539
|
@store.experimental_features = options.dig(:initializationOptions, :experimentalFeaturesEnabled) || false
|
520
540
|
|
521
541
|
configured_hints = options.dig(:initializationOptions, :featuresConfiguration, :inlayHint)
|
522
|
-
configured_lenses = options.dig(:initializationOptions, :featuresConfiguration, :codeLens)
|
523
542
|
T.must(@store.features_configuration.dig(:inlayHint)).configuration.merge!(configured_hints) if configured_hints
|
524
|
-
T.must(@store.features_configuration.dig(:codeLens)).configuration.merge!(configured_lenses) if configured_lenses
|
525
543
|
|
526
544
|
enabled_features = case configured_features
|
527
545
|
when Array
|
data/lib/ruby_lsp/internal.rb
CHANGED
@@ -23,7 +23,7 @@ require "ruby_lsp/parameter_scope"
|
|
23
23
|
require "ruby_lsp/server"
|
24
24
|
require "ruby_lsp/executor"
|
25
25
|
require "ruby_lsp/requests"
|
26
|
-
require "ruby_lsp/
|
26
|
+
require "ruby_lsp/response_builders"
|
27
27
|
require "ruby_lsp/document"
|
28
28
|
require "ruby_lsp/ruby_document"
|
29
29
|
require "ruby_lsp/store"
|