ruby-lsp 0.12.1 → 0.12.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2774623b2161a416bfb07769e8eb5ccf3d40177f98edf9e4d4ed4c7e3f7fd47b
4
- data.tar.gz: 23626aa84fdaf85571c7d039d670f9131409ccb7a8cd2c61d4889ffd08ecb8de
3
+ metadata.gz: b053184e8e593901a5344dfd3d34d20962fd2ed773900e00112be751008dae7d
4
+ data.tar.gz: '087be2ed7ace3fdb9eed751215a806deab096c6a5aa415d170eceaa45286c4d9'
5
5
  SHA512:
6
- metadata.gz: ffd099ba6d95ce10cd3fd2c3fb1e431d5481e0e8bad77c062fdd9b2f9fce534f9c58319672e508d17ca089e10ba9fdf398479dd9dfac3adbc347912815800cdd
7
- data.tar.gz: fb0f4c3111718c5f792266459e2694787ea7939b63c819707bba764395dc6cc3bf1d925517a1fa412b362fbd0b3222e8460723df4f2c3a4272ac73dc62eb872a
6
+ metadata.gz: e29d0633e023d4d3ce3efe5347479d9e2c16b1cbf02638e29b8f617158c08d7aae84ae4ad1f5898f6bd34033e841070d8cd2ffe8d67180ad4c554f3d5f80b564
7
+ data.tar.gz: 7a74cc5acca390661a196e21760f6c82e00478a02539c4c5cc2d17089948287762886c8a169d2384b59aa7e3324dda08fc3fa52a1aa6112951a2a8bc6b9253ab
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.12.1
1
+ 0.12.3
@@ -198,7 +198,11 @@ module RubyIndexer
198
198
  excluded.each do |dependency|
199
199
  next unless dependency.runtime?
200
200
 
201
- dependency.to_spec.dependencies.each do |transitive_dependency|
201
+ # If the dependency is prerelease, to_spec may return `nil`
202
+ spec = dependency.to_spec
203
+ next unless spec
204
+
205
+ spec.dependencies.each do |transitive_dependency|
202
206
  # If the transitive dependency is included in other groups, skip it
203
207
  next if others.any? { |d| d.name == transitive_dependency.name }
204
208
 
@@ -136,8 +136,9 @@ module RubyIndexer
136
136
  case node
137
137
  when Prism::RequiredParameterNode
138
138
  node.name
139
- when Prism::RequiredDestructuredParameterNode
140
- names = node.parameters.map { |parameter_node| parameter_name(parameter_node) }
139
+ when Prism::MultiTargetNode
140
+ names = [*node.lefts, *node.rest, *node.rights].map { |parameter_node| parameter_name(parameter_node) }
141
+
141
142
  names_with_commas = names.join(", ")
142
143
  :"(#{names_with_commas})"
143
144
  end
@@ -35,7 +35,7 @@ module RubyIndexer
35
35
  value = node.value
36
36
  values = value.is_a?(Prism::ArrayNode) && value.opening_loc ? value.elements : []
37
37
 
38
- node.targets.each_with_index do |target, i|
38
+ [*node.lefts, *node.rest, *node.rights].each_with_index do |target, i|
39
39
  current_value = values[i]
40
40
  # The moment we find a splat on the right hand side of the assignment, we can no longer figure out which value
41
41
  # gets assigned to what
@@ -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 },
@@ -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
@@ -73,6 +73,8 @@ module RubyLsp
73
73
  :on_module_node_leave,
74
74
  :on_instance_variable_write_node_enter,
75
75
  :on_class_variable_write_node_enter,
76
+ :on_singleton_class_node_enter,
77
+ :on_singleton_class_node_leave,
76
78
  )
77
79
  end
78
80
 
@@ -103,6 +105,23 @@ module RubyLsp
103
105
  @stack.pop
104
106
  end
105
107
 
108
+ sig { params(node: Prism::SingletonClassNode).void }
109
+ def on_singleton_class_node_enter(node)
110
+ expression = node.expression
111
+
112
+ @stack << create_document_symbol(
113
+ name: "<< #{expression.slice}",
114
+ kind: Constant::SymbolKind::NAMESPACE,
115
+ range_location: node.location,
116
+ selection_range_location: expression.location,
117
+ )
118
+ end
119
+
120
+ sig { params(node: Prism::SingletonClassNode).void }
121
+ def on_singleton_class_node_leave(node)
122
+ @stack.pop
123
+ end
124
+
106
125
  sig { params(node: Prism::CallNode).void }
107
126
  def on_call_node_enter(node)
108
127
  return unless ATTR_ACCESSORS.include?(node.name) && node.receiver.nil?
@@ -163,10 +182,14 @@ module RubyLsp
163
182
  sig { params(node: Prism::DefNode).void }
164
183
  def on_def_node_enter(node)
165
184
  receiver = node.receiver
185
+ previous_symbol = @stack.last
166
186
 
167
187
  if receiver.is_a?(Prism::SelfNode)
168
188
  name = "self.#{node.name}"
169
- kind = Constant::SymbolKind::METHOD
189
+ kind = Constant::SymbolKind::FUNCTION
190
+ elsif previous_symbol.is_a?(Interface::DocumentSymbol) && previous_symbol.name.start_with?("<<")
191
+ name = node.name.to_s
192
+ kind = Constant::SymbolKind::FUNCTION
170
193
  else
171
194
  name = node.name.to_s
172
195
  kind = name == "initialize" ? Constant::SymbolKind::CONSTRUCTOR : Constant::SymbolKind::METHOD
@@ -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 }
@@ -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
@@ -58,7 +58,7 @@ module RubyLsp
58
58
 
59
59
  sig { void }
60
60
  def start
61
- warn("Starting Ruby LSP...")
61
+ warn("Starting Ruby LSP v#{VERSION}...")
62
62
 
63
63
  # Requests that have to be executed sequentially or in the main process are implemented here. All other requests
64
64
  # fall under the else branch which just pushes requests to the queue
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.1
4
+ version: 0.12.3
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-26 00:00:00.000000000 Z
11
+ date: 2023-11-06 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