ruby-lsp 0.12.2 → 0.12.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -87,15 +87,19 @@ module RubyLsp
87
87
  :start,
88
88
  :line,
89
89
  ) && closest_node_loc.end_line - 1 >= source_range.dig(:end, :line)
90
- indentation_line = closest_node_loc.start_line - 1
91
- target_line = indentation_line
90
+ indentation_line_number = closest_node_loc.start_line - 1
91
+ target_line = indentation_line_number
92
92
  else
93
93
  target_line = closest_node_loc.end_line
94
- indentation_line = closest_node_loc.end_line - 1
94
+ indentation_line_number = closest_node_loc.end_line - 1
95
95
  end
96
96
 
97
97
  lines = @document.source.lines
98
- indentation = T.must(T.must(lines[indentation_line])[/\A */]).size
98
+
99
+ indentation_line = lines[indentation_line_number]
100
+ return Error::InvalidTargetRange unless indentation_line
101
+
102
+ indentation = T.must(indentation_line[/\A */]).size
99
103
 
100
104
  target_range = {
101
105
  start: { line: target_line, character: indentation },
@@ -6,9 +6,14 @@ module RubyLsp
6
6
  # ![Completion demo](../../completion.gif)
7
7
  #
8
8
  # The [completion](https://microsoft.github.io/language-server-protocol/specification#textDocument_completion)
9
- # suggests possible completions according to what the developer is typing. Currently, completion is support for
10
- # - require paths
11
- # - classes, modules and constant names
9
+ # suggests possible completions according to what the developer is typing.
10
+ #
11
+ # Currently supported targets:
12
+ # - Classes
13
+ # - Modules
14
+ # - Constants
15
+ # - Require paths
16
+ # - Methods invoked on self only
12
17
  #
13
18
  # # Example
14
19
  #
@@ -45,6 +50,7 @@ module RubyLsp
45
50
  :on_string_node_enter,
46
51
  :on_constant_path_node_enter,
47
52
  :on_constant_read_node_enter,
53
+ :on_call_node_enter,
48
54
  )
49
55
  end
50
56
 
@@ -118,8 +124,48 @@ module RubyLsp
118
124
  end
119
125
  end
120
126
 
127
+ sig { params(node: Prism::CallNode).void }
128
+ def on_call_node_enter(node)
129
+ return if DependencyDetector.instance.typechecker
130
+ return unless self_receiver?(node)
131
+
132
+ name = node.message
133
+ return unless name
134
+
135
+ receiver_entries = @index[@nesting.join("::")]
136
+ return unless receiver_entries
137
+
138
+ receiver = T.must(receiver_entries.first)
139
+
140
+ candidates = T.cast(@index.prefix_search(name), T::Array[T::Array[RubyIndexer::Entry::Method]])
141
+ candidates.each do |entries|
142
+ entry = entries.find { |e| e.owner&.name == receiver.name }
143
+ next unless entry
144
+
145
+ @_response << build_method_completion(entry, node)
146
+ end
147
+ end
148
+
121
149
  private
122
150
 
151
+ sig { params(entry: RubyIndexer::Entry::Method, node: Prism::CallNode).returns(Interface::CompletionItem) }
152
+ def build_method_completion(entry, node)
153
+ name = entry.name
154
+ parameters = entry.parameters
155
+ new_text = parameters.empty? ? name : "#{name}(#{parameters.map(&:name).join(", ")})"
156
+
157
+ Interface::CompletionItem.new(
158
+ label: name,
159
+ filter_text: name,
160
+ text_edit: Interface::TextEdit.new(range: range_from_node(node), new_text: new_text),
161
+ kind: Constant::CompletionItemKind::METHOD,
162
+ label_details: Interface::CompletionItemLabelDetails.new(
163
+ description: entry.file_name,
164
+ ),
165
+ documentation: markdown_from_index_entries(name, entry),
166
+ )
167
+ end
168
+
123
169
  sig { params(label: String, node: Prism::StringNode).returns(Interface::CompletionItem) }
124
170
  def build_completion(label, node)
125
171
  Interface::CompletionItem.new(
@@ -9,7 +9,12 @@ module RubyLsp
9
9
  # request](https://microsoft.github.io/language-server-protocol/specification#textDocument_definition) jumps to the
10
10
  # definition of the symbol under the cursor.
11
11
  #
12
- # Currently, only jumping to classes, modules and required files is supported.
12
+ # Currently supported targets:
13
+ # - Classes
14
+ # - Modules
15
+ # - Constants
16
+ # - Require paths
17
+ # - Methods invoked on self only
13
18
  #
14
19
  # # Example
15
20
  #
@@ -75,8 +80,52 @@ module RubyLsp
75
80
  sig { params(node: Prism::CallNode).void }
76
81
  def on_call_node_enter(node)
77
82
  message = node.name
78
- return unless message == :require || message == :require_relative
79
83
 
84
+ if message == :require || message == :require_relative
85
+ handle_require_definition(node)
86
+ else
87
+ handle_method_definition(node)
88
+ end
89
+ end
90
+
91
+ sig { params(node: Prism::ConstantPathNode).void }
92
+ def on_constant_path_node_enter(node)
93
+ find_in_index(node.slice)
94
+ end
95
+
96
+ sig { params(node: Prism::ConstantReadNode).void }
97
+ def on_constant_read_node_enter(node)
98
+ find_in_index(node.slice)
99
+ end
100
+
101
+ private
102
+
103
+ sig { params(node: Prism::CallNode).void }
104
+ def handle_method_definition(node)
105
+ return unless self_receiver?(node)
106
+
107
+ message = node.message
108
+ return unless message
109
+
110
+ target_method = @index.resolve_method(message, @nesting.join("::"))
111
+ return unless target_method
112
+
113
+ location = target_method.location
114
+ file_path = target_method.file_path
115
+ return if defined_in_gem?(file_path)
116
+
117
+ @_response = Interface::Location.new(
118
+ uri: URI::Generic.from_path(path: file_path).to_s,
119
+ range: Interface::Range.new(
120
+ start: Interface::Position.new(line: location.start_line - 1, character: location.start_column),
121
+ end: Interface::Position.new(line: location.end_line - 1, character: location.end_column),
122
+ ),
123
+ )
124
+ end
125
+
126
+ sig { params(node: Prism::CallNode).void }
127
+ def handle_require_definition(node)
128
+ message = node.name
80
129
  arguments = node.arguments
81
130
  return unless arguments
82
131
 
@@ -116,18 +165,6 @@ module RubyLsp
116
165
  end
117
166
  end
118
167
 
119
- sig { params(node: Prism::ConstantPathNode).void }
120
- def on_constant_path_node_enter(node)
121
- find_in_index(node.slice)
122
- end
123
-
124
- sig { params(node: Prism::ConstantReadNode).void }
125
- def on_constant_read_node_enter(node)
126
- find_in_index(node.slice)
127
- end
128
-
129
- private
130
-
131
168
  sig { params(value: String).void }
132
169
  def find_in_index(value)
133
170
  entries = @index.resolve(value, @nesting)
@@ -138,23 +175,13 @@ module RubyLsp
138
175
  first_entry = T.must(entries.first)
139
176
  return if first_entry.visibility == :private && first_entry.name != "#{@nesting.join("::")}::#{value}"
140
177
 
141
- bundle_path = begin
142
- Bundler.bundle_path.to_s
143
- rescue Bundler::GemfileNotFound
144
- nil
145
- end
146
-
147
178
  @_response = entries.filter_map do |entry|
148
179
  location = entry.location
149
180
  # If the project has Sorbet, then we only want to handle go to definition for constants defined in gems, as an
150
181
  # additional behavior on top of jumping to RBIs. Sorbet can already handle go to definition for all constants
151
182
  # in the project, even if the files are typed false
152
183
  file_path = entry.file_path
153
- if DependencyDetector.instance.typechecker && bundle_path && !file_path.start_with?(bundle_path) &&
154
- !file_path.start_with?(RbConfig::CONFIG["rubylibdir"])
155
-
156
- next
157
- end
184
+ next if defined_in_gem?(file_path)
158
185
 
159
186
  Interface::Location.new(
160
187
  uri: URI::Generic.from_path(path: file_path).to_s,
@@ -97,7 +97,8 @@ module RubyLsp
97
97
  Prism::LocalVariableWriteNode,
98
98
  Prism::BlockParameterNode,
99
99
  Prism::RequiredParameterNode,
100
- Prism::KeywordParameterNode,
100
+ Prism::RequiredKeywordParameterNode,
101
+ Prism::OptionalKeywordParameterNode,
101
102
  Prism::RestParameterNode,
102
103
  Prism::OptionalParameterNode,
103
104
  Prism::KeywordRestParameterNode,
@@ -137,8 +138,9 @@ module RubyLsp
137
138
  Prism::ClassVariableReadNode, Prism::ClassVariableTargetNode, Prism::ClassVariableWriteNode,
138
139
  Prism::LocalVariableAndWriteNode, Prism::LocalVariableOperatorWriteNode, Prism::LocalVariableOrWriteNode,
139
140
  Prism::LocalVariableReadNode, Prism::LocalVariableTargetNode, Prism::LocalVariableWriteNode,
140
- Prism::CallNode, Prism::BlockParameterNode, Prism::KeywordParameterNode, Prism::KeywordRestParameterNode,
141
- Prism::OptionalParameterNode, Prism::RequiredParameterNode, Prism::RestParameterNode
141
+ Prism::CallNode, Prism::BlockParameterNode, Prism::RequiredKeywordParameterNode,
142
+ Prism::RequiredKeywordParameterNode, Prism::KeywordRestParameterNode, Prism::OptionalParameterNode,
143
+ Prism::RequiredParameterNode, Prism::RestParameterNode
142
144
  target
143
145
  end
144
146
 
@@ -171,7 +173,8 @@ module RubyLsp
171
173
  :on_constant_path_and_write_node_enter,
172
174
  :on_constant_path_operator_write_node_enter,
173
175
  :on_local_variable_write_node_enter,
174
- :on_keyword_parameter_node_enter,
176
+ :on_required_keyword_parameter_node_enter,
177
+ :on_optional_keyword_parameter_node_enter,
175
178
  :on_rest_parameter_node_enter,
176
179
  :on_optional_parameter_node_enter,
177
180
  :on_keyword_rest_parameter_node_enter,
@@ -359,8 +362,15 @@ module RubyLsp
359
362
  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
360
363
  end
361
364
 
362
- sig { params(node: Prism::KeywordParameterNode).void }
363
- def on_keyword_parameter_node_enter(node)
365
+ sig { params(node: Prism::RequiredKeywordParameterNode).void }
366
+ def on_required_keyword_parameter_node_enter(node)
367
+ return unless matches?(node, LOCAL_NODES)
368
+
369
+ add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
370
+ end
371
+
372
+ sig { params(node: Prism::OptionalKeywordParameterNode).void }
373
+ def on_optional_keyword_parameter_node_enter(node)
364
374
  return unless matches?(node, LOCAL_NODES)
365
375
 
366
376
  add_highlight(Constant::DocumentHighlightKind::WRITE, node.name_loc)
@@ -551,8 +561,8 @@ module RubyLsp
551
561
  Prism::ClassVariableTargetNode, Prism::ClassVariableWriteNode, Prism::LocalVariableAndWriteNode,
552
562
  Prism::LocalVariableOperatorWriteNode, Prism::LocalVariableOrWriteNode, Prism::LocalVariableReadNode,
553
563
  Prism::LocalVariableTargetNode, Prism::LocalVariableWriteNode, Prism::DefNode, Prism::BlockParameterNode,
554
- Prism::KeywordParameterNode, Prism::KeywordRestParameterNode, Prism::OptionalParameterNode,
555
- Prism::RequiredParameterNode, Prism::RestParameterNode
564
+ Prism::RequiredKeywordParameterNode, Prism::OptionalKeywordParameterNode, Prism::KeywordRestParameterNode,
565
+ Prism::OptionalParameterNode, Prism::RequiredParameterNode, Prism::RestParameterNode
556
566
 
557
567
  node.name.to_s
558
568
  when Prism::CallNode
@@ -94,7 +94,7 @@ module RubyLsp
94
94
  opening_loc = node.opening_loc
95
95
  closing_loc = node.closing_loc
96
96
 
97
- add_lines_range(opening_loc.start_line, closing_loc.end_line - 1) if opening_loc && closing_loc
97
+ add_lines_range(opening_loc.start_line, closing_loc.start_line - 1) if opening_loc && closing_loc
98
98
  end
99
99
 
100
100
  sig { params(node: Prism::ArrayNode).void }
@@ -51,6 +51,7 @@ module RubyLsp
51
51
  :on_constant_read_node_enter,
52
52
  :on_constant_write_node_enter,
53
53
  :on_constant_path_node_enter,
54
+ :on_call_node_enter,
54
55
  )
55
56
  end
56
57
 
@@ -95,6 +96,25 @@ module RubyLsp
95
96
  generate_hover(node.slice, node.location)
96
97
  end
97
98
 
99
+ sig { params(node: Prism::CallNode).void }
100
+ def on_call_node_enter(node)
101
+ return if DependencyDetector.instance.typechecker
102
+ return unless self_receiver?(node)
103
+
104
+ message = node.message
105
+ return unless message
106
+
107
+ target_method = @index.resolve_method(message, @nesting.join("::"))
108
+ return unless target_method
109
+
110
+ location = target_method.location
111
+
112
+ @_response = Interface::Hover.new(
113
+ range: range_from_location(location),
114
+ contents: markdown_from_index_entries(message, target_method),
115
+ )
116
+ end
117
+
98
118
  private
99
119
 
100
120
  sig { params(name: String, location: Prism::Location).void }
@@ -18,6 +18,16 @@ module RubyLsp
18
18
  # puts "handle some rescue"
19
19
  # end
20
20
  # ```
21
+ #
22
+ # # Example
23
+ #
24
+ # ```ruby
25
+ # var = "foo"
26
+ # {
27
+ # var: var, # Label "var" goes here in cases where the value is omitted
28
+ # a: "hello",
29
+ # }
30
+ # ```
21
31
  class InlayHints < Listener
22
32
  extend T::Sig
23
33
  extend T::Generic
@@ -36,7 +46,7 @@ module RubyLsp
36
46
  @_response = T.let([], ResponseType)
37
47
  @range = range
38
48
 
39
- dispatcher.register(self, :on_rescue_node_enter)
49
+ dispatcher.register(self, :on_rescue_node_enter, :on_implicit_node_enter)
40
50
  end
41
51
 
42
52
  sig { params(node: Prism::RescueNode).void }
@@ -53,6 +63,34 @@ module RubyLsp
53
63
  tooltip: "StandardError is implied in a bare rescue",
54
64
  )
55
65
  end
66
+
67
+ sig { params(node: Prism::ImplicitNode).void }
68
+ def on_implicit_node_enter(node)
69
+ return unless visible?(node, @range)
70
+
71
+ node_value = node.value
72
+ loc = node.location
73
+ tooltip = ""
74
+ node_name = ""
75
+ case node_value
76
+ when Prism::CallNode
77
+ node_name = node_value.name
78
+ tooltip = "This is a method call. Method name: #{node_name}"
79
+ when Prism::ConstantReadNode
80
+ node_name = node_value.name
81
+ tooltip = "This is a constant: #{node_name}"
82
+ when Prism::LocalVariableReadNode
83
+ node_name = node_value.name
84
+ tooltip = "This is a local variable: #{node_name}"
85
+ end
86
+
87
+ @_response << Interface::InlayHint.new(
88
+ position: { line: loc.start_line - 1, character: loc.start_column + node_name.length + 1 },
89
+ label: node_name,
90
+ padding_left: true,
91
+ tooltip: tooltip,
92
+ )
93
+ end
56
94
  end
57
95
  end
58
96
  end
@@ -51,7 +51,14 @@ module RubyLsp
51
51
  if (comment_match = @previous_line.match(/^#(\s*)/))
52
52
  handle_comment_line(T.must(comment_match[1]))
53
53
  elsif @document.syntax_error?
54
- handle_statement_end
54
+ match = /(?<=<<(-|~))(?<quote>['"`]?)(?<delimiter>\w+)\k<quote>/.match(@previous_line)
55
+ heredoc_delimiter = match && match.named_captures["delimiter"]
56
+
57
+ if heredoc_delimiter
58
+ handle_heredoc_end(heredoc_delimiter)
59
+ else
60
+ handle_statement_end
61
+ end
55
62
  end
56
63
  end
57
64
 
@@ -121,6 +128,14 @@ module RubyLsp
121
128
  end
122
129
  end
123
130
 
131
+ sig { params(delimiter: String).void }
132
+ def handle_heredoc_end(delimiter)
133
+ indents = " " * @indentation
134
+ add_edit_with_text("\n")
135
+ add_edit_with_text("#{indents}#{delimiter}")
136
+ move_cursor_to(@position[:line], @indentation + 2)
137
+ end
138
+
124
139
  sig { params(spaces: String).void }
125
140
  def handle_comment_line(spaces)
126
141
  add_edit_with_text("##{spaces}")
@@ -135,7 +135,8 @@ module RubyLsp
135
135
  :on_local_variable_write_node_enter,
136
136
  :on_local_variable_read_node_enter,
137
137
  :on_block_parameter_node_enter,
138
- :on_keyword_parameter_node_enter,
138
+ :on_required_keyword_parameter_node_enter,
139
+ :on_optional_keyword_parameter_node_enter,
139
140
  :on_keyword_rest_parameter_node_enter,
140
141
  :on_optional_parameter_node_enter,
141
142
  :on_required_parameter_node_enter,
@@ -252,11 +253,18 @@ module RubyLsp
252
253
  @current_scope << name.to_sym if name
253
254
  end
254
255
 
255
- sig { params(node: Prism::KeywordParameterNode).void }
256
- def on_keyword_parameter_node_enter(node)
257
- name = node.name
258
- @current_scope << name.to_s.delete_suffix(":").to_sym if name
256
+ sig { params(node: Prism::RequiredKeywordParameterNode).void }
257
+ def on_required_keyword_parameter_node_enter(node)
258
+ @current_scope << node.name
259
+ return unless visible?(node, @range)
260
+
261
+ location = node.name_loc
262
+ add_token(location.copy(length: location.length - 1), :parameter)
263
+ end
259
264
 
265
+ sig { params(node: Prism::OptionalKeywordParameterNode).void }
266
+ def on_optional_keyword_parameter_node_enter(node)
267
+ @current_scope << node.name
260
268
  return unless visible?(node, @range)
261
269
 
262
270
  location = node.name_loc
@@ -9,6 +9,9 @@ module RubyLsp
9
9
  # https://github.com/Shopify/ruby-lsp-rails, or addons by created by developers outside of Shopify, so be
10
10
  # cautious of changing anything.
11
11
  extend T::Sig
12
+ extend T::Helpers
13
+
14
+ requires_ancestor { Kernel }
12
15
 
13
16
  sig { params(node: Prism::Node).returns(Interface::Range) }
14
17
  def range_from_node(node)
@@ -66,12 +69,29 @@ module RubyLsp
66
69
  )
67
70
  end
68
71
 
69
- sig { params(title: String, entries: T::Array[RubyIndexer::Entry]).returns(Interface::MarkupContent) }
72
+ sig { params(file_path: String).returns(T.nilable(T::Boolean)) }
73
+ def defined_in_gem?(file_path)
74
+ DependencyDetector.instance.typechecker && BUNDLE_PATH && !file_path.start_with?(T.must(BUNDLE_PATH)) &&
75
+ !file_path.start_with?(RbConfig::CONFIG["rubylibdir"])
76
+ end
77
+
78
+ sig { params(node: Prism::CallNode).returns(T::Boolean) }
79
+ def self_receiver?(node)
80
+ receiver = node.receiver
81
+ receiver.nil? || receiver.is_a?(Prism::SelfNode)
82
+ end
83
+
84
+ sig do
85
+ params(
86
+ title: String,
87
+ entries: T.any(T::Array[RubyIndexer::Entry], RubyIndexer::Entry),
88
+ ).returns(Interface::MarkupContent)
89
+ end
70
90
  def markdown_from_index_entries(title, entries)
71
91
  markdown_title = "```ruby\n#{title}\n```"
72
92
  definitions = []
73
93
  content = +""
74
- entries.each do |entry|
94
+ Array(entries).each do |entry|
75
95
  loc = entry.location
76
96
 
77
97
  # We always handle locations as zero based. However, for file links in Markdown we need them to be one
@@ -66,7 +66,6 @@ module RubyLsp
66
66
 
67
67
  sig { returns(T::Array[String]) }
68
68
  def dependencies
69
- # NOTE: If changing this behaviour, it's likely that the VS Code extension will also need changed.
70
69
  @dependencies ||= T.let(
71
70
  begin
72
71
  Bundler.with_original_env { Bundler.default_gemfile }
@@ -20,6 +20,7 @@ module RubyLsp
20
20
  #
21
21
  class WorkspaceSymbol
22
22
  extend T::Sig
23
+ include Support::Common
23
24
 
24
25
  sig { params(query: T.nilable(String), index: RubyIndexer::Index).void }
25
26
  def initialize(query, index)
@@ -29,21 +30,11 @@ module RubyLsp
29
30
 
30
31
  sig { returns(T::Array[Interface::WorkspaceSymbol]) }
31
32
  def run
32
- bundle_path = begin
33
- Bundler.bundle_path.to_s
34
- rescue Bundler::GemfileNotFound
35
- nil
36
- end
37
-
38
33
  @index.fuzzy_search(@query).filter_map do |entry|
39
34
  # If the project is using Sorbet, we let Sorbet handle symbols defined inside the project itself and RBIs, but
40
35
  # we still return entries defined in gems to allow developers to jump directly to the source
41
36
  file_path = entry.file_path
42
- if DependencyDetector.instance.typechecker && bundle_path && !file_path.start_with?(bundle_path) &&
43
- !file_path.start_with?(RbConfig::CONFIG["rubylibdir"])
44
-
45
- next
46
- end
37
+ next if defined_in_gem?(file_path)
47
38
 
48
39
  # We should never show private symbols when searching the entire workspace
49
40
  next if entry.visibility == :private
@@ -82,6 +73,8 @@ module RubyLsp
82
73
  Constant::SymbolKind::NAMESPACE
83
74
  when RubyIndexer::Entry::Constant
84
75
  Constant::SymbolKind::CONSTANT
76
+ when RubyIndexer::Entry::Method
77
+ entry.name == "initialize" ? Constant::SymbolKind::CONSTRUCTOR : Constant::SymbolKind::METHOD
85
78
  end
86
79
  end
87
80
  end
@@ -0,0 +1,14 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ module RubyLsp
5
+ class RubyDocument < Document
6
+ sig { override.returns(Prism::ParseResult) }
7
+ def parse
8
+ return @parse_result unless @needs_parsing
9
+
10
+ @needs_parsing = false
11
+ @parse_result = Prism.parse(@source)
12
+ end
13
+ end
14
+ end
@@ -12,6 +12,8 @@ require "time"
12
12
  # the Ruby LSP without including the gem in their application's Gemfile while at the same time giving us access to the
13
13
  # exact locked versions of dependencies.
14
14
 
15
+ Bundler.ui.level = :silent
16
+
15
17
  module RubyLsp
16
18
  class SetupBundler
17
19
  extend T::Sig
@@ -1,8 +1,6 @@
1
1
  # typed: strict
2
2
  # frozen_string_literal: true
3
3
 
4
- require "ruby_lsp/document"
5
-
6
4
  module RubyLsp
7
5
  class Store
8
6
  extend T::Sig
@@ -40,7 +38,7 @@ module RubyLsp
40
38
 
41
39
  sig { params(uri: URI::Generic, source: String, version: Integer).void }
42
40
  def set(uri:, source:, version:)
43
- document = Document.new(source: source, version: version, uri: uri, encoding: @encoding)
41
+ document = RubyDocument.new(source: source, version: version, uri: uri, encoding: @encoding)
44
42
  @state[uri.to_s] = document
45
43
  end
46
44
 
@@ -8,6 +8,15 @@ module RubyLsp
8
8
  # This freeze is not redundant since the interpolated string is mutable
9
9
  WORKSPACE_URI = T.let(URI::Generic.from_path(path: Dir.pwd), URI::Generic)
10
10
 
11
+ BUNDLE_PATH = T.let(
12
+ begin
13
+ Bundler.bundle_path.to_s
14
+ rescue Bundler::GemfileNotFound
15
+ nil
16
+ end,
17
+ T.nilable(String),
18
+ )
19
+
11
20
  # A notification to be sent to the client
12
21
  class Message
13
22
  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.12.2
4
+ version: 0.12.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shopify
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-31 00:00:00.000000000 Z
11
+ date: 2023-11-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: language_server-protocol
@@ -30,20 +30,20 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 0.15.1
33
+ version: 0.17.1
34
34
  - - "<"
35
35
  - !ruby/object:Gem::Version
36
- version: '0.16'
36
+ version: '0.18'
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: 0.15.1
43
+ version: 0.17.1
44
44
  - - "<"
45
45
  - !ruby/object:Gem::Version
46
- version: '0.16'
46
+ version: '0.18'
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: sorbet-runtime
49
49
  requirement: !ruby/object:Gem::Requirement
@@ -78,12 +78,12 @@ files:
78
78
  - lib/rubocop/cop/ruby_lsp/use_language_server_aliases.rb
79
79
  - lib/rubocop/cop/ruby_lsp/use_register_with_handler_method.rb
80
80
  - lib/ruby-lsp.rb
81
+ - lib/ruby_indexer/lib/ruby_indexer/collector.rb
81
82
  - lib/ruby_indexer/lib/ruby_indexer/configuration.rb
82
83
  - lib/ruby_indexer/lib/ruby_indexer/entry.rb
83
84
  - lib/ruby_indexer/lib/ruby_indexer/index.rb
84
85
  - lib/ruby_indexer/lib/ruby_indexer/indexable_path.rb
85
86
  - lib/ruby_indexer/lib/ruby_indexer/prefix_tree.rb
86
- - lib/ruby_indexer/lib/ruby_indexer/visitor.rb
87
87
  - lib/ruby_indexer/ruby_indexer.rb
88
88
  - lib/ruby_indexer/test/classes_and_modules_test.rb
89
89
  - lib/ruby_indexer/test/configuration_test.rb
@@ -132,6 +132,7 @@ files:
132
132
  - lib/ruby_lsp/requests/support/source_uri.rb
133
133
  - lib/ruby_lsp/requests/support/syntax_tree_formatting_runner.rb
134
134
  - lib/ruby_lsp/requests/workspace_symbol.rb
135
+ - lib/ruby_lsp/ruby_document.rb
135
136
  - lib/ruby_lsp/server.rb
136
137
  - lib/ruby_lsp/setup_bundler.rb
137
138
  - lib/ruby_lsp/store.rb