ruby-lsp 0.23.11 → 0.23.17

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.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/VERSION +1 -1
  4. data/exe/ruby-lsp-launcher +20 -11
  5. data/lib/rubocop/cop/ruby_lsp/use_language_server_aliases.rb +1 -1
  6. data/lib/rubocop/cop/ruby_lsp/use_register_with_handler_method.rb +3 -5
  7. data/lib/ruby_indexer/lib/ruby_indexer/configuration.rb +82 -116
  8. data/lib/ruby_indexer/lib/ruby_indexer/declaration_listener.rb +134 -183
  9. data/lib/ruby_indexer/lib/ruby_indexer/enhancement.rb +9 -10
  10. data/lib/ruby_indexer/lib/ruby_indexer/entry.rb +97 -217
  11. data/lib/ruby_indexer/lib/ruby_indexer/index.rb +139 -281
  12. data/lib/ruby_indexer/lib/ruby_indexer/location.rb +4 -27
  13. data/lib/ruby_indexer/lib/ruby_indexer/prefix_tree.rb +18 -19
  14. data/lib/ruby_indexer/lib/ruby_indexer/rbs_indexer.rb +23 -55
  15. data/lib/ruby_indexer/lib/ruby_indexer/reference_finder.rb +47 -61
  16. data/lib/ruby_indexer/lib/ruby_indexer/uri.rb +17 -19
  17. data/lib/ruby_indexer/lib/ruby_indexer/visibility_scope.rb +7 -11
  18. data/lib/ruby_indexer/test/class_variables_test.rb +14 -14
  19. data/lib/ruby_indexer/test/classes_and_modules_test.rb +65 -40
  20. data/lib/ruby_indexer/test/configuration_test.rb +48 -7
  21. data/lib/ruby_indexer/test/constant_test.rb +34 -34
  22. data/lib/ruby_indexer/test/enhancements_test.rb +1 -1
  23. data/lib/ruby_indexer/test/index_test.rb +146 -135
  24. data/lib/ruby_indexer/test/instance_variables_test.rb +37 -37
  25. data/lib/ruby_indexer/test/method_test.rb +149 -123
  26. data/lib/ruby_indexer/test/prefix_tree_test.rb +13 -13
  27. data/lib/ruby_indexer/test/rbs_indexer_test.rb +68 -73
  28. data/lib/ruby_indexer/test/test_case.rb +9 -3
  29. data/lib/ruby_indexer/test/uri_test.rb +15 -2
  30. data/lib/ruby_lsp/addon.rb +44 -71
  31. data/lib/ruby_lsp/base_server.rb +29 -32
  32. data/lib/ruby_lsp/client_capabilities.rb +10 -12
  33. data/lib/ruby_lsp/document.rb +40 -54
  34. data/lib/ruby_lsp/erb_document.rb +37 -41
  35. data/lib/ruby_lsp/global_state.rb +52 -57
  36. data/lib/ruby_lsp/internal.rb +2 -0
  37. data/lib/ruby_lsp/listeners/code_lens.rb +82 -89
  38. data/lib/ruby_lsp/listeners/completion.rb +67 -73
  39. data/lib/ruby_lsp/listeners/definition.rb +44 -58
  40. data/lib/ruby_lsp/listeners/document_highlight.rb +123 -150
  41. data/lib/ruby_lsp/listeners/document_link.rb +50 -70
  42. data/lib/ruby_lsp/listeners/document_symbol.rb +38 -52
  43. data/lib/ruby_lsp/listeners/folding_ranges.rb +40 -43
  44. data/lib/ruby_lsp/listeners/hover.rb +92 -110
  45. data/lib/ruby_lsp/listeners/inlay_hints.rb +4 -11
  46. data/lib/ruby_lsp/listeners/semantic_highlighting.rb +54 -56
  47. data/lib/ruby_lsp/listeners/signature_help.rb +12 -27
  48. data/lib/ruby_lsp/listeners/spec_style.rb +155 -0
  49. data/lib/ruby_lsp/listeners/test_discovery.rb +89 -0
  50. data/lib/ruby_lsp/listeners/test_style.rb +167 -90
  51. data/lib/ruby_lsp/node_context.rb +12 -39
  52. data/lib/ruby_lsp/rbs_document.rb +9 -7
  53. data/lib/ruby_lsp/requests/code_action_resolve.rb +63 -59
  54. data/lib/ruby_lsp/requests/code_actions.rb +14 -26
  55. data/lib/ruby_lsp/requests/code_lens.rb +20 -19
  56. data/lib/ruby_lsp/requests/completion.rb +7 -20
  57. data/lib/ruby_lsp/requests/completion_resolve.rb +6 -6
  58. data/lib/ruby_lsp/requests/definition.rb +7 -17
  59. data/lib/ruby_lsp/requests/diagnostics.rb +8 -11
  60. data/lib/ruby_lsp/requests/discover_tests.rb +18 -5
  61. data/lib/ruby_lsp/requests/document_highlight.rb +5 -15
  62. data/lib/ruby_lsp/requests/document_link.rb +6 -17
  63. data/lib/ruby_lsp/requests/document_symbol.rb +5 -8
  64. data/lib/ruby_lsp/requests/folding_ranges.rb +7 -15
  65. data/lib/ruby_lsp/requests/formatting.rb +6 -9
  66. data/lib/ruby_lsp/requests/go_to_relevant_file.rb +85 -0
  67. data/lib/ruby_lsp/requests/hover.rb +10 -20
  68. data/lib/ruby_lsp/requests/inlay_hints.rb +6 -17
  69. data/lib/ruby_lsp/requests/on_type_formatting.rb +32 -40
  70. data/lib/ruby_lsp/requests/prepare_rename.rb +4 -9
  71. data/lib/ruby_lsp/requests/prepare_type_hierarchy.rb +5 -15
  72. data/lib/ruby_lsp/requests/range_formatting.rb +5 -6
  73. data/lib/ruby_lsp/requests/references.rb +9 -53
  74. data/lib/ruby_lsp/requests/rename.rb +20 -46
  75. data/lib/ruby_lsp/requests/request.rb +8 -19
  76. data/lib/ruby_lsp/requests/selection_ranges.rb +6 -6
  77. data/lib/ruby_lsp/requests/semantic_highlighting.rb +16 -35
  78. data/lib/ruby_lsp/requests/show_syntax_tree.rb +7 -8
  79. data/lib/ruby_lsp/requests/signature_help.rb +8 -26
  80. data/lib/ruby_lsp/requests/support/annotation.rb +4 -10
  81. data/lib/ruby_lsp/requests/support/common.rb +15 -55
  82. data/lib/ruby_lsp/requests/support/rubocop_diagnostic.rb +27 -35
  83. data/lib/ruby_lsp/requests/support/rubocop_formatter.rb +11 -14
  84. data/lib/ruby_lsp/requests/support/rubocop_runner.rb +22 -34
  85. data/lib/ruby_lsp/requests/support/selection_range.rb +1 -3
  86. data/lib/ruby_lsp/requests/support/sorbet.rb +29 -38
  87. data/lib/ruby_lsp/requests/support/source_uri.rb +20 -32
  88. data/lib/ruby_lsp/requests/support/syntax_tree_formatter.rb +12 -19
  89. data/lib/ruby_lsp/requests/support/test_item.rb +16 -14
  90. data/lib/ruby_lsp/requests/type_hierarchy_supertypes.rb +5 -6
  91. data/lib/ruby_lsp/requests/workspace_symbol.rb +4 -4
  92. data/lib/ruby_lsp/response_builders/collection_response_builder.rb +5 -5
  93. data/lib/ruby_lsp/response_builders/document_symbol.rb +14 -19
  94. data/lib/ruby_lsp/response_builders/hover.rb +11 -14
  95. data/lib/ruby_lsp/response_builders/response_builder.rb +1 -1
  96. data/lib/ruby_lsp/response_builders/semantic_highlighting.rb +60 -88
  97. data/lib/ruby_lsp/response_builders/signature_help.rb +5 -6
  98. data/lib/ruby_lsp/response_builders/test_collection.rb +43 -10
  99. data/lib/ruby_lsp/ruby_document.rb +24 -92
  100. data/lib/ruby_lsp/scope.rb +7 -11
  101. data/lib/ruby_lsp/scripts/compose_bundle.rb +6 -4
  102. data/lib/ruby_lsp/server.rb +182 -99
  103. data/lib/ruby_lsp/setup_bundler.rb +65 -60
  104. data/lib/ruby_lsp/static_docs.rb +11 -7
  105. data/lib/ruby_lsp/store.rb +29 -47
  106. data/lib/ruby_lsp/test_helper.rb +2 -12
  107. data/lib/ruby_lsp/test_reporters/lsp_reporter.rb +191 -0
  108. data/lib/ruby_lsp/test_reporters/minitest_reporter.rb +105 -0
  109. data/lib/ruby_lsp/test_reporters/test_unit_reporter.rb +94 -0
  110. data/lib/ruby_lsp/type_inferrer.rb +13 -14
  111. data/lib/ruby_lsp/utils.rb +92 -83
  112. metadata +9 -3
@@ -4,19 +4,12 @@
4
4
  module RubyLsp
5
5
  module Listeners
6
6
  class FoldingRanges
7
- extend T::Sig
8
7
  include Requests::Support::Common
9
8
 
10
- sig do
11
- params(
12
- response_builder: ResponseBuilders::CollectionResponseBuilder[Interface::FoldingRange],
13
- comments: T::Array[Prism::Comment],
14
- dispatcher: Prism::Dispatcher,
15
- ).void
16
- end
9
+ #: (ResponseBuilders::CollectionResponseBuilder[Interface::FoldingRange] response_builder, Array[Prism::Comment] comments, Prism::Dispatcher dispatcher) -> void
17
10
  def initialize(response_builder, comments, dispatcher)
18
11
  @response_builder = response_builder
19
- @requires = T.let([], T::Array[Prism::CallNode])
12
+ @requires = [] #: Array[Prism::CallNode]
20
13
  @comments = comments
21
14
 
22
15
  dispatcher.register(
@@ -47,33 +40,33 @@ module RubyLsp
47
40
  )
48
41
  end
49
42
 
50
- sig { void }
43
+ #: -> void
51
44
  def finalize_response!
52
45
  push_comment_ranges
53
46
  emit_requires_range
54
47
  end
55
48
 
56
- sig { params(node: Prism::IfNode).void }
49
+ #: (Prism::IfNode node) -> void
57
50
  def on_if_node_enter(node)
58
51
  add_statements_range(node)
59
52
  end
60
53
 
61
- sig { params(node: Prism::InNode).void }
54
+ #: (Prism::InNode node) -> void
62
55
  def on_in_node_enter(node)
63
56
  add_statements_range(node)
64
57
  end
65
58
 
66
- sig { params(node: Prism::RescueNode).void }
59
+ #: (Prism::RescueNode node) -> void
67
60
  def on_rescue_node_enter(node)
68
61
  add_statements_range(node)
69
62
  end
70
63
 
71
- sig { params(node: Prism::WhenNode).void }
64
+ #: (Prism::WhenNode node) -> void
72
65
  def on_when_node_enter(node)
73
66
  add_statements_range(node)
74
67
  end
75
68
 
76
- sig { params(node: Prism::InterpolatedStringNode).void }
69
+ #: (Prism::InterpolatedStringNode node) -> void
77
70
  def on_interpolated_string_node_enter(node)
78
71
  opening_loc = node.opening_loc || node.location
79
72
  closing_loc = node.closing_loc || node.parts.last&.location || node.location
@@ -81,82 +74,82 @@ module RubyLsp
81
74
  add_lines_range(opening_loc.start_line, closing_loc.start_line - 1)
82
75
  end
83
76
 
84
- sig { params(node: Prism::ArrayNode).void }
77
+ #: (Prism::ArrayNode node) -> void
85
78
  def on_array_node_enter(node)
86
79
  add_simple_range(node)
87
80
  end
88
81
 
89
- sig { params(node: Prism::BlockNode).void }
82
+ #: (Prism::BlockNode node) -> void
90
83
  def on_block_node_enter(node)
91
84
  add_simple_range(node)
92
85
  end
93
86
 
94
- sig { params(node: Prism::CaseNode).void }
87
+ #: (Prism::CaseNode node) -> void
95
88
  def on_case_node_enter(node)
96
89
  add_simple_range(node)
97
90
  end
98
91
 
99
- sig { params(node: Prism::CaseMatchNode).void }
92
+ #: (Prism::CaseMatchNode node) -> void
100
93
  def on_case_match_node_enter(node)
101
94
  add_simple_range(node)
102
95
  end
103
96
 
104
- sig { params(node: Prism::ClassNode).void }
97
+ #: (Prism::ClassNode node) -> void
105
98
  def on_class_node_enter(node)
106
99
  add_simple_range(node)
107
100
  end
108
101
 
109
- sig { params(node: Prism::ModuleNode).void }
102
+ #: (Prism::ModuleNode node) -> void
110
103
  def on_module_node_enter(node)
111
104
  add_simple_range(node)
112
105
  end
113
106
 
114
- sig { params(node: Prism::ForNode).void }
107
+ #: (Prism::ForNode node) -> void
115
108
  def on_for_node_enter(node)
116
109
  add_simple_range(node)
117
110
  end
118
111
 
119
- sig { params(node: Prism::HashNode).void }
112
+ #: (Prism::HashNode node) -> void
120
113
  def on_hash_node_enter(node)
121
114
  add_simple_range(node)
122
115
  end
123
116
 
124
- sig { params(node: Prism::SingletonClassNode).void }
117
+ #: (Prism::SingletonClassNode node) -> void
125
118
  def on_singleton_class_node_enter(node)
126
119
  add_simple_range(node)
127
120
  end
128
121
 
129
- sig { params(node: Prism::UnlessNode).void }
122
+ #: (Prism::UnlessNode node) -> void
130
123
  def on_unless_node_enter(node)
131
124
  add_simple_range(node)
132
125
  end
133
126
 
134
- sig { params(node: Prism::UntilNode).void }
127
+ #: (Prism::UntilNode node) -> void
135
128
  def on_until_node_enter(node)
136
129
  add_simple_range(node)
137
130
  end
138
131
 
139
- sig { params(node: Prism::WhileNode).void }
132
+ #: (Prism::WhileNode node) -> void
140
133
  def on_while_node_enter(node)
141
134
  add_simple_range(node)
142
135
  end
143
136
 
144
- sig { params(node: Prism::ElseNode).void }
137
+ #: (Prism::ElseNode node) -> void
145
138
  def on_else_node_enter(node)
146
139
  add_simple_range(node)
147
140
  end
148
141
 
149
- sig { params(node: Prism::EnsureNode).void }
142
+ #: (Prism::EnsureNode node) -> void
150
143
  def on_ensure_node_enter(node)
151
144
  add_simple_range(node)
152
145
  end
153
146
 
154
- sig { params(node: Prism::BeginNode).void }
147
+ #: (Prism::BeginNode node) -> void
155
148
  def on_begin_node_enter(node)
156
149
  add_simple_range(node)
157
150
  end
158
151
 
159
- sig { params(node: Prism::DefNode).void }
152
+ #: (Prism::DefNode node) -> void
160
153
  def on_def_node_enter(node)
161
154
  params = node.parameters
162
155
  parameter_loc = params&.location
@@ -171,7 +164,7 @@ module RubyLsp
171
164
  end
172
165
  end
173
166
 
174
- sig { params(node: Prism::CallNode).void }
167
+ #: (Prism::CallNode node) -> void
175
168
  def on_call_node_enter(node)
176
169
  # If we find a require, don't visit the child nodes (prevent `super`), so that we can keep accumulating into
177
170
  # the `@requires` array and then push the range whenever we find a node that isn't a CallNode
@@ -184,14 +177,14 @@ module RubyLsp
184
177
  add_lines_range(location.start_line, location.end_line - 1)
185
178
  end
186
179
 
187
- sig { params(node: Prism::LambdaNode).void }
180
+ #: (Prism::LambdaNode node) -> void
188
181
  def on_lambda_node_enter(node)
189
182
  add_simple_range(node)
190
183
  end
191
184
 
192
185
  private
193
186
 
194
- sig { void }
187
+ #: -> void
195
188
  def push_comment_ranges
196
189
  # Group comments that are on consecutive lines and then push ranges for each group that has at least 2 comments
197
190
  @comments.chunk_while do |this, other|
@@ -200,19 +193,23 @@ module RubyLsp
200
193
  next if chunk.length == 1
201
194
 
202
195
  @response_builder << Interface::FoldingRange.new(
203
- start_line: T.must(chunk.first).location.start_line - 1,
204
- end_line: T.must(chunk.last).location.end_line - 1,
196
+ start_line: chunk.first #: as !nil
197
+ .location.start_line - 1,
198
+ end_line: chunk.last #: as !nil
199
+ .location.end_line - 1,
205
200
  kind: "comment",
206
201
  )
207
202
  end
208
203
  end
209
204
 
210
- sig { void }
205
+ #: -> void
211
206
  def emit_requires_range
212
207
  if @requires.length > 1
213
208
  @response_builder << Interface::FoldingRange.new(
214
- start_line: T.must(@requires.first).location.start_line - 1,
215
- end_line: T.must(@requires.last).location.end_line - 1,
209
+ start_line: @requires.first #: as !nil
210
+ .location.start_line - 1,
211
+ end_line: @requires.last #: as !nil
212
+ .location.end_line - 1,
216
213
  kind: "imports",
217
214
  )
218
215
  end
@@ -220,7 +217,7 @@ module RubyLsp
220
217
  @requires.clear
221
218
  end
222
219
 
223
- sig { params(node: Prism::CallNode).returns(T::Boolean) }
220
+ #: (Prism::CallNode node) -> bool
224
221
  def require?(node)
225
222
  message = node.message
226
223
  return false unless message == "require" || message == "require_relative"
@@ -234,7 +231,7 @@ module RubyLsp
234
231
  arguments.length == 1 && arguments.first.is_a?(Prism::StringNode)
235
232
  end
236
233
 
237
- sig { params(node: T.any(Prism::IfNode, Prism::InNode, Prism::RescueNode, Prism::WhenNode)).void }
234
+ #: ((Prism::IfNode | Prism::InNode | Prism::RescueNode | Prism::WhenNode) node) -> void
238
235
  def add_statements_range(node)
239
236
  statements = node.statements
240
237
  return unless statements
@@ -245,13 +242,13 @@ module RubyLsp
245
242
  add_lines_range(node.location.start_line, statement.location.end_line)
246
243
  end
247
244
 
248
- sig { params(node: Prism::Node).void }
245
+ #: (Prism::Node node) -> void
249
246
  def add_simple_range(node)
250
247
  location = node.location
251
248
  add_lines_range(location.start_line, location.end_line - 1)
252
249
  end
253
250
 
254
- sig { params(start_line: Integer, end_line: Integer).void }
251
+ #: (Integer start_line, Integer end_line) -> void
255
252
  def add_lines_range(start_line, end_line)
256
253
  emit_requires_range
257
254
  return if start_line >= end_line