ruby-lsp 0.13.4 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -2
  3. data/VERSION +1 -1
  4. data/lib/rubocop/cop/ruby_lsp/use_register_with_handler_method.rb +4 -8
  5. data/lib/ruby_indexer/lib/ruby_indexer/collector.rb +5 -1
  6. data/lib/ruby_indexer/lib/ruby_indexer/configuration.rb +4 -2
  7. data/lib/ruby_indexer/lib/ruby_indexer/index.rb +8 -3
  8. data/lib/ruby_indexer/test/classes_and_modules_test.rb +9 -0
  9. data/lib/ruby_indexer/test/index_test.rb +27 -0
  10. data/lib/ruby_lsp/addon.rb +21 -10
  11. data/lib/ruby_lsp/check_docs.rb +8 -8
  12. data/lib/ruby_lsp/executor.rb +28 -10
  13. data/lib/ruby_lsp/internal.rb +1 -1
  14. data/lib/ruby_lsp/listeners/code_lens.rb +54 -55
  15. data/lib/ruby_lsp/listeners/completion.rb +17 -16
  16. data/lib/ruby_lsp/listeners/definition.rb +10 -16
  17. data/lib/ruby_lsp/listeners/document_highlight.rb +6 -11
  18. data/lib/ruby_lsp/listeners/document_link.rb +6 -12
  19. data/lib/ruby_lsp/listeners/document_symbol.rb +95 -55
  20. data/lib/ruby_lsp/listeners/folding_ranges.rb +19 -23
  21. data/lib/ruby_lsp/listeners/hover.rb +26 -30
  22. data/lib/ruby_lsp/listeners/inlay_hints.rb +7 -13
  23. data/lib/ruby_lsp/listeners/semantic_highlighting.rb +54 -124
  24. data/lib/ruby_lsp/listeners/signature_help.rb +11 -13
  25. data/lib/ruby_lsp/requests/code_lens.rb +9 -17
  26. data/lib/ruby_lsp/requests/completion.rb +7 -9
  27. data/lib/ruby_lsp/requests/definition.rb +10 -22
  28. data/lib/ruby_lsp/requests/document_highlight.rb +7 -5
  29. data/lib/ruby_lsp/requests/document_link.rb +7 -6
  30. data/lib/ruby_lsp/requests/document_symbol.rb +5 -11
  31. data/lib/ruby_lsp/requests/folding_ranges.rb +11 -6
  32. data/lib/ruby_lsp/requests/hover.rb +18 -24
  33. data/lib/ruby_lsp/requests/inlay_hints.rb +7 -8
  34. data/lib/ruby_lsp/requests/on_type_formatting.rb +12 -2
  35. data/lib/ruby_lsp/requests/semantic_highlighting.rb +10 -8
  36. data/lib/ruby_lsp/requests/signature_help.rb +53 -18
  37. data/lib/ruby_lsp/requests/support/common.rb +23 -10
  38. data/lib/ruby_lsp/requests/support/dependency_detector.rb +5 -1
  39. data/lib/ruby_lsp/requests.rb +0 -1
  40. data/lib/ruby_lsp/response_builders/collection_response_builder.rb +29 -0
  41. data/lib/ruby_lsp/response_builders/document_symbol.rb +57 -0
  42. data/lib/ruby_lsp/response_builders/hover.rb +49 -0
  43. data/lib/ruby_lsp/response_builders/response_builder.rb +16 -0
  44. data/lib/ruby_lsp/response_builders/semantic_highlighting.rb +199 -0
  45. data/lib/ruby_lsp/response_builders/signature_help.rb +28 -0
  46. data/lib/ruby_lsp/response_builders.rb +13 -0
  47. data/lib/ruby_lsp/server.rb +3 -3
  48. data/lib/ruby_lsp/setup_bundler.rb +30 -5
  49. data/lib/ruby_lsp/store.rb +4 -4
  50. metadata +12 -7
  51. data/lib/ruby_lsp/listener.rb +0 -33
  52. 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: 675bc1c9ddbcb8c05d591e184e2cf77914a6fcfa4af5db6178864063a910e0bd
4
- data.tar.gz: 3f14554ce578fe5457ad90f2500b5267fded390e17b58142a2a174928630c53c
3
+ metadata.gz: 846e8dec07f2ef860ee536f5031df7d38b43d60fa920edd8858d3231aea8dfdc
4
+ data.tar.gz: 423fe5ec4630332897a9a691c5fb7349c1c2f31e017fa1d5bbdc07a95f0c616d
5
5
  SHA512:
6
- metadata.gz: 55fabbd6b161a499b378eead24ba073a7729d7772d702585b995efc3667c761a39544bb09c289c0ef16fa3300b907a7573173bbe7966b6656cddf912c60b7fd7
7
- data.tar.gz: 85c9e57ae099be6fc957cf6a0ad63e07b6eb5e207770b3ea5cbd0cd328383ca9f76314c16f03f1a2707ce78991a6ce20dc382fb17ce4ed8ce1e7e4fdd6c5d5bb
6
+ metadata.gz: aa20b2be3ee98080569821635324953270b40986c914c57737239e8879175ad3a31bb76094e27518249e6388d366575d0cef76a762cb108136fb54d1b47fe897
7
+ data.tar.gz: 5e3cd7e882c998001234cce3b08124148c4bffbf6b223d57b6eca9cef5d9128c2b8d460161fb1b4bbf13e77c9f2360cb98a903a24b82e739b754bf9e08b1ca00
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  [![Build Status](https://github.com/Shopify/ruby-lsp/workflows/CI/badge.svg)](https://github.com/Shopify/ruby-lsp/actions/workflows/ci.yml)
2
2
  [![Ruby LSP extension](https://img.shields.io/badge/VS%20Code-Ruby%20LSP-success?logo=visual-studio-code)](https://marketplace.visualstudio.com/items?itemName=Shopify.ruby-lsp)
3
- [![Ruby DX Slack](https://img.shields.io/badge/Slack-Ruby%20DX-success?logo=slack)](https://join.slack.com/t/ruby-dx/shared_invite/zt-1zjp7lmgk-zL7bGvze8gj5hFaYS~r5vg)
3
+ [![Ruby DX Slack](https://img.shields.io/badge/Slack-Ruby%20DX-success?logo=slack)](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-1zjp7lmgk-zL7bGvze8gj5hFaYS~r5vg).
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.13.4
1
+ 0.14.0
@@ -13,9 +13,8 @@ module RuboCop
13
13
  # # Register without handler method.
14
14
  #
15
15
  # # bad
16
- # class MyListener < Listener
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 < Listener
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 < Listener
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 < Listener
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
- next if comment_content.match?(RubyIndexer.configuration.magic_comment_regex)
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.dependencies.include?(transitive_dependency) }
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::Method)) }
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 = T.cast(self[method_name], T.nilable(T::Array[Entry::Method]))
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
- method_entries.find { |entry| entry.owner&.name == owner_name }
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
@@ -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
- warn(e.message)
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
- ).returns(T.nilable(Listener[T::Array[Interface::CodeLens]]))
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
- ).returns(T.nilable(Listener[T.nilable(Interface::Hover)]))
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
- ).returns(T.nilable(Listener[T::Array[Interface::DocumentSymbol]]))
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
- ).returns(T.nilable(Listener[T.nilable(T.any(T::Array[Interface::Location], Interface::Location))]))
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
@@ -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 listeners and their related
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 listeners are documented")
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 listeners are loaded
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 or Listener, which are the ones we want to make sure are
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 listener constant
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
- warn(<<~WARN)
119
- The following listeners are missing documentation:
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 listeners are documented!"
127
+ puts "All requests are documented!"
128
128
  end
129
129
  end
130
130
  end
@@ -25,7 +25,7 @@ module RubyLsp
25
25
  begin
26
26
  response = run(request)
27
27
  rescue StandardError, LoadError => e
28
- warn(e.message)
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
- warn(errored_addons.map(&:backtraces).join("\n\n"))
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
- warn("Ruby LSP is ready")
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
- lenses_configuration = T.must(@store.features_configuration.dig(:codeLens))
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
- Requests::Support::SemanticTokenEncoder.new.encode(semantic_highlighting.perform),
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
- Requests::Support::SemanticTokenEncoder.new.encode(request.perform)
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
@@ -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/listener"
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"