ruby-lsp 0.23.11 → 0.26.1

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 (119) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/VERSION +1 -1
  4. data/exe/ruby-lsp +10 -4
  5. data/exe/ruby-lsp-check +0 -4
  6. data/exe/ruby-lsp-launcher +45 -22
  7. data/exe/ruby-lsp-test-exec +6 -0
  8. data/lib/rubocop/cop/ruby_lsp/use_language_server_aliases.rb +1 -2
  9. data/lib/rubocop/cop/ruby_lsp/use_register_with_handler_method.rb +3 -6
  10. data/lib/ruby_indexer/lib/ruby_indexer/configuration.rb +82 -116
  11. data/lib/ruby_indexer/lib/ruby_indexer/declaration_listener.rb +140 -183
  12. data/lib/ruby_indexer/lib/ruby_indexer/enhancement.rb +10 -14
  13. data/lib/ruby_indexer/lib/ruby_indexer/entry.rb +107 -236
  14. data/lib/ruby_indexer/lib/ruby_indexer/index.rb +166 -281
  15. data/lib/ruby_indexer/lib/ruby_indexer/location.rb +4 -27
  16. data/lib/ruby_indexer/lib/ruby_indexer/prefix_tree.rb +23 -27
  17. data/lib/ruby_indexer/lib/ruby_indexer/rbs_indexer.rb +25 -57
  18. data/lib/ruby_indexer/lib/ruby_indexer/reference_finder.rb +58 -68
  19. data/lib/ruby_indexer/lib/ruby_indexer/uri.rb +17 -19
  20. data/lib/ruby_indexer/lib/ruby_indexer/visibility_scope.rb +7 -11
  21. data/lib/ruby_indexer/test/class_variables_test.rb +14 -14
  22. data/lib/ruby_indexer/test/classes_and_modules_test.rb +65 -40
  23. data/lib/ruby_indexer/test/configuration_test.rb +49 -9
  24. data/lib/ruby_indexer/test/constant_test.rb +34 -34
  25. data/lib/ruby_indexer/test/enhancements_test.rb +1 -1
  26. data/lib/ruby_indexer/test/index_test.rb +185 -135
  27. data/lib/ruby_indexer/test/instance_variables_test.rb +61 -37
  28. data/lib/ruby_indexer/test/method_test.rb +166 -123
  29. data/lib/ruby_indexer/test/prefix_tree_test.rb +21 -21
  30. data/lib/ruby_indexer/test/rbs_indexer_test.rb +70 -75
  31. data/lib/ruby_indexer/test/reference_finder_test.rb +79 -14
  32. data/lib/ruby_indexer/test/test_case.rb +9 -3
  33. data/lib/ruby_indexer/test/uri_test.rb +15 -2
  34. data/lib/ruby_lsp/addon.rb +88 -86
  35. data/lib/ruby_lsp/base_server.rb +59 -54
  36. data/lib/ruby_lsp/client_capabilities.rb +16 -13
  37. data/lib/ruby_lsp/document.rb +205 -104
  38. data/lib/ruby_lsp/erb_document.rb +45 -47
  39. data/lib/ruby_lsp/global_state.rb +73 -57
  40. data/lib/ruby_lsp/internal.rb +8 -3
  41. data/lib/ruby_lsp/listeners/code_lens.rb +82 -89
  42. data/lib/ruby_lsp/listeners/completion.rb +81 -76
  43. data/lib/ruby_lsp/listeners/definition.rb +44 -58
  44. data/lib/ruby_lsp/listeners/document_highlight.rb +123 -150
  45. data/lib/ruby_lsp/listeners/document_link.rb +50 -70
  46. data/lib/ruby_lsp/listeners/document_symbol.rb +38 -52
  47. data/lib/ruby_lsp/listeners/folding_ranges.rb +40 -43
  48. data/lib/ruby_lsp/listeners/hover.rb +107 -115
  49. data/lib/ruby_lsp/listeners/inlay_hints.rb +8 -13
  50. data/lib/ruby_lsp/listeners/semantic_highlighting.rb +54 -56
  51. data/lib/ruby_lsp/listeners/signature_help.rb +12 -27
  52. data/lib/ruby_lsp/listeners/spec_style.rb +214 -0
  53. data/lib/ruby_lsp/listeners/test_discovery.rb +92 -0
  54. data/lib/ruby_lsp/listeners/test_style.rb +205 -95
  55. data/lib/ruby_lsp/node_context.rb +12 -39
  56. data/lib/ruby_lsp/rbs_document.rb +10 -11
  57. data/lib/ruby_lsp/requests/code_action_resolve.rb +65 -61
  58. data/lib/ruby_lsp/requests/code_actions.rb +14 -26
  59. data/lib/ruby_lsp/requests/code_lens.rb +31 -21
  60. data/lib/ruby_lsp/requests/completion.rb +8 -21
  61. data/lib/ruby_lsp/requests/completion_resolve.rb +6 -6
  62. data/lib/ruby_lsp/requests/definition.rb +8 -20
  63. data/lib/ruby_lsp/requests/diagnostics.rb +8 -11
  64. data/lib/ruby_lsp/requests/discover_tests.rb +20 -7
  65. data/lib/ruby_lsp/requests/document_highlight.rb +6 -16
  66. data/lib/ruby_lsp/requests/document_link.rb +6 -17
  67. data/lib/ruby_lsp/requests/document_symbol.rb +5 -8
  68. data/lib/ruby_lsp/requests/folding_ranges.rb +7 -15
  69. data/lib/ruby_lsp/requests/formatting.rb +6 -9
  70. data/lib/ruby_lsp/requests/go_to_relevant_file.rb +85 -0
  71. data/lib/ruby_lsp/requests/hover.rb +12 -25
  72. data/lib/ruby_lsp/requests/inlay_hints.rb +8 -19
  73. data/lib/ruby_lsp/requests/on_type_formatting.rb +32 -40
  74. data/lib/ruby_lsp/requests/prepare_rename.rb +5 -10
  75. data/lib/ruby_lsp/requests/prepare_type_hierarchy.rb +5 -15
  76. data/lib/ruby_lsp/requests/range_formatting.rb +5 -6
  77. data/lib/ruby_lsp/requests/references.rb +17 -57
  78. data/lib/ruby_lsp/requests/rename.rb +27 -51
  79. data/lib/ruby_lsp/requests/request.rb +13 -25
  80. data/lib/ruby_lsp/requests/selection_ranges.rb +7 -7
  81. data/lib/ruby_lsp/requests/semantic_highlighting.rb +16 -35
  82. data/lib/ruby_lsp/requests/show_syntax_tree.rb +7 -8
  83. data/lib/ruby_lsp/requests/signature_help.rb +9 -27
  84. data/lib/ruby_lsp/requests/support/annotation.rb +4 -10
  85. data/lib/ruby_lsp/requests/support/common.rb +16 -58
  86. data/lib/ruby_lsp/requests/support/formatter.rb +16 -15
  87. data/lib/ruby_lsp/requests/support/rubocop_diagnostic.rb +27 -35
  88. data/lib/ruby_lsp/requests/support/rubocop_formatter.rb +13 -16
  89. data/lib/ruby_lsp/requests/support/rubocop_runner.rb +34 -36
  90. data/lib/ruby_lsp/requests/support/selection_range.rb +1 -3
  91. data/lib/ruby_lsp/requests/support/sorbet.rb +29 -38
  92. data/lib/ruby_lsp/requests/support/source_uri.rb +20 -32
  93. data/lib/ruby_lsp/requests/support/syntax_tree_formatter.rb +12 -19
  94. data/lib/ruby_lsp/requests/support/test_item.rb +16 -14
  95. data/lib/ruby_lsp/requests/type_hierarchy_supertypes.rb +5 -6
  96. data/lib/ruby_lsp/requests/workspace_symbol.rb +4 -4
  97. data/lib/ruby_lsp/response_builders/collection_response_builder.rb +6 -9
  98. data/lib/ruby_lsp/response_builders/document_symbol.rb +15 -21
  99. data/lib/ruby_lsp/response_builders/hover.rb +12 -18
  100. data/lib/ruby_lsp/response_builders/response_builder.rb +6 -7
  101. data/lib/ruby_lsp/response_builders/semantic_highlighting.rb +62 -91
  102. data/lib/ruby_lsp/response_builders/signature_help.rb +6 -8
  103. data/lib/ruby_lsp/response_builders/test_collection.rb +35 -13
  104. data/lib/ruby_lsp/ruby_document.rb +32 -98
  105. data/lib/ruby_lsp/scope.rb +7 -11
  106. data/lib/ruby_lsp/scripts/compose_bundle.rb +6 -4
  107. data/lib/ruby_lsp/server.rb +303 -196
  108. data/lib/ruby_lsp/setup_bundler.rb +121 -82
  109. data/lib/ruby_lsp/static_docs.rb +12 -7
  110. data/lib/ruby_lsp/store.rb +21 -49
  111. data/lib/ruby_lsp/test_helper.rb +3 -16
  112. data/lib/ruby_lsp/test_reporters/lsp_reporter.rb +233 -0
  113. data/lib/ruby_lsp/test_reporters/minitest_reporter.rb +145 -0
  114. data/lib/ruby_lsp/test_reporters/test_unit_reporter.rb +92 -0
  115. data/lib/ruby_lsp/type_inferrer.rb +13 -14
  116. data/lib/ruby_lsp/utils.rb +138 -93
  117. data/static_docs/break.md +103 -0
  118. metadata +14 -20
  119. data/lib/ruby_lsp/load_sorbet.rb +0 -62
@@ -4,72 +4,58 @@
4
4
  module RubyLsp
5
5
  module Listeners
6
6
  class Hover
7
- extend T::Sig
8
7
  include Requests::Support::Common
9
8
 
10
- ALLOWED_TARGETS = T.let(
11
- [
12
- Prism::CallNode,
13
- Prism::ConstantReadNode,
14
- Prism::ConstantWriteNode,
15
- Prism::ConstantPathNode,
16
- Prism::GlobalVariableAndWriteNode,
17
- Prism::GlobalVariableOperatorWriteNode,
18
- Prism::GlobalVariableOrWriteNode,
19
- Prism::GlobalVariableReadNode,
20
- Prism::GlobalVariableTargetNode,
21
- Prism::GlobalVariableWriteNode,
22
- Prism::InstanceVariableReadNode,
23
- Prism::InstanceVariableAndWriteNode,
24
- Prism::InstanceVariableOperatorWriteNode,
25
- Prism::InstanceVariableOrWriteNode,
26
- Prism::InstanceVariableTargetNode,
27
- Prism::InstanceVariableWriteNode,
28
- Prism::SymbolNode,
29
- Prism::StringNode,
30
- Prism::InterpolatedStringNode,
31
- Prism::SuperNode,
32
- Prism::ForwardingSuperNode,
33
- Prism::YieldNode,
34
- Prism::ClassVariableAndWriteNode,
35
- Prism::ClassVariableOperatorWriteNode,
36
- Prism::ClassVariableOrWriteNode,
37
- Prism::ClassVariableReadNode,
38
- Prism::ClassVariableTargetNode,
39
- Prism::ClassVariableWriteNode,
40
- ],
41
- T::Array[T.class_of(Prism::Node)],
42
- )
43
-
44
- ALLOWED_REMOTE_PROVIDERS = T.let(
45
- [
46
- "https://github.com",
47
- "https://gitlab.com",
48
- ].freeze,
49
- T::Array[String],
50
- )
51
-
52
- sig do
53
- params(
54
- response_builder: ResponseBuilders::Hover,
55
- global_state: GlobalState,
56
- uri: URI::Generic,
57
- node_context: NodeContext,
58
- dispatcher: Prism::Dispatcher,
59
- sorbet_level: RubyDocument::SorbetLevel,
60
- ).void
61
- end
9
+ ALLOWED_TARGETS = [
10
+ Prism::BreakNode,
11
+ Prism::CallNode,
12
+ Prism::ConstantReadNode,
13
+ Prism::ConstantWriteNode,
14
+ Prism::ConstantPathNode,
15
+ Prism::GlobalVariableAndWriteNode,
16
+ Prism::GlobalVariableOperatorWriteNode,
17
+ Prism::GlobalVariableOrWriteNode,
18
+ Prism::GlobalVariableReadNode,
19
+ Prism::GlobalVariableTargetNode,
20
+ Prism::GlobalVariableWriteNode,
21
+ Prism::InstanceVariableReadNode,
22
+ Prism::InstanceVariableAndWriteNode,
23
+ Prism::InstanceVariableOperatorWriteNode,
24
+ Prism::InstanceVariableOrWriteNode,
25
+ Prism::InstanceVariableTargetNode,
26
+ Prism::InstanceVariableWriteNode,
27
+ Prism::SymbolNode,
28
+ Prism::StringNode,
29
+ Prism::InterpolatedStringNode,
30
+ Prism::SuperNode,
31
+ Prism::ForwardingSuperNode,
32
+ Prism::YieldNode,
33
+ Prism::ClassVariableAndWriteNode,
34
+ Prism::ClassVariableOperatorWriteNode,
35
+ Prism::ClassVariableOrWriteNode,
36
+ Prism::ClassVariableReadNode,
37
+ Prism::ClassVariableTargetNode,
38
+ Prism::ClassVariableWriteNode,
39
+ ] #: Array[singleton(Prism::Node)]
40
+
41
+ ALLOWED_REMOTE_PROVIDERS = [
42
+ "https://github.com",
43
+ "https://gitlab.com",
44
+ ].freeze #: Array[String]
45
+
46
+ #: (ResponseBuilders::Hover response_builder, GlobalState global_state, URI::Generic uri, NodeContext node_context, Prism::Dispatcher dispatcher, SorbetLevel sorbet_level) -> void
62
47
  def initialize(response_builder, global_state, uri, node_context, dispatcher, sorbet_level) # rubocop:disable Metrics/ParameterLists
63
48
  @response_builder = response_builder
64
49
  @global_state = global_state
65
- @index = T.let(global_state.index, RubyIndexer::Index)
66
- @type_inferrer = T.let(global_state.type_inferrer, TypeInferrer)
67
- @path = T.let(uri.to_standardized_path, T.nilable(String))
50
+ @index = global_state.index #: RubyIndexer::Index
51
+ @type_inferrer = global_state.type_inferrer #: TypeInferrer
52
+ @path = uri.to_standardized_path #: String?
68
53
  @node_context = node_context
69
54
  @sorbet_level = sorbet_level
70
55
 
71
56
  dispatcher.register(
72
57
  self,
58
+ :on_break_node_enter,
73
59
  :on_constant_read_node_enter,
74
60
  :on_constant_write_node_enter,
75
61
  :on_constant_path_node_enter,
@@ -100,19 +86,32 @@ module RubyLsp
100
86
  )
101
87
  end
102
88
 
103
- sig { params(node: Prism::StringNode).void }
89
+ #: (Prism::BreakNode node) -> void
90
+ def on_break_node_enter(node)
91
+ handle_keyword_documentation(node.keyword)
92
+ end
93
+
94
+ #: (Prism::StringNode node) -> void
104
95
  def on_string_node_enter(node)
96
+ if @path && File.basename(@path) == GEMFILE_NAME
97
+ call_node = @node_context.call_node
98
+ if call_node && call_node.name == :gem && call_node.arguments&.arguments&.first == node
99
+ generate_gem_hover(call_node)
100
+ return
101
+ end
102
+ end
103
+
105
104
  generate_heredoc_hover(node)
106
105
  end
107
106
 
108
- sig { params(node: Prism::InterpolatedStringNode).void }
107
+ #: (Prism::InterpolatedStringNode node) -> void
109
108
  def on_interpolated_string_node_enter(node)
110
109
  generate_heredoc_hover(node)
111
110
  end
112
111
 
113
- sig { params(node: Prism::ConstantReadNode).void }
112
+ #: (Prism::ConstantReadNode node) -> void
114
113
  def on_constant_read_node_enter(node)
115
- return if @sorbet_level != RubyDocument::SorbetLevel::Ignore
114
+ return unless @sorbet_level.ignore?
116
115
 
117
116
  name = RubyIndexer::Index.constant_name(node)
118
117
  return if name.nil?
@@ -120,16 +119,16 @@ module RubyLsp
120
119
  generate_hover(name, node.location)
121
120
  end
122
121
 
123
- sig { params(node: Prism::ConstantWriteNode).void }
122
+ #: (Prism::ConstantWriteNode node) -> void
124
123
  def on_constant_write_node_enter(node)
125
- return if @sorbet_level != RubyDocument::SorbetLevel::Ignore
124
+ return unless @sorbet_level.ignore?
126
125
 
127
126
  generate_hover(node.name.to_s, node.name_loc)
128
127
  end
129
128
 
130
- sig { params(node: Prism::ConstantPathNode).void }
129
+ #: (Prism::ConstantPathNode node) -> void
131
130
  def on_constant_path_node_enter(node)
132
- return if @sorbet_level != RubyDocument::SorbetLevel::Ignore
131
+ return unless @sorbet_level.ignore?
133
132
 
134
133
  name = RubyIndexer::Index.constant_name(node)
135
134
  return if name.nil?
@@ -137,14 +136,9 @@ module RubyLsp
137
136
  generate_hover(name, node.location)
138
137
  end
139
138
 
140
- sig { params(node: Prism::CallNode).void }
139
+ #: (Prism::CallNode node) -> void
141
140
  def on_call_node_enter(node)
142
- if @path && File.basename(@path) == GEMFILE_NAME && node.name == :gem
143
- generate_gem_hover(node)
144
- return
145
- end
146
-
147
- return if sorbet_level_true_or_higher?(@sorbet_level) && self_receiver?(node)
141
+ return if @sorbet_level.true_or_higher? && self_receiver?(node)
148
142
 
149
143
  message = node.message
150
144
  return unless message
@@ -152,114 +146,114 @@ module RubyLsp
152
146
  handle_method_hover(message)
153
147
  end
154
148
 
155
- sig { params(node: Prism::GlobalVariableAndWriteNode).void }
149
+ #: (Prism::GlobalVariableAndWriteNode node) -> void
156
150
  def on_global_variable_and_write_node_enter(node)
157
151
  handle_global_variable_hover(node.name.to_s)
158
152
  end
159
153
 
160
- sig { params(node: Prism::GlobalVariableOperatorWriteNode).void }
154
+ #: (Prism::GlobalVariableOperatorWriteNode node) -> void
161
155
  def on_global_variable_operator_write_node_enter(node)
162
156
  handle_global_variable_hover(node.name.to_s)
163
157
  end
164
158
 
165
- sig { params(node: Prism::GlobalVariableOrWriteNode).void }
159
+ #: (Prism::GlobalVariableOrWriteNode node) -> void
166
160
  def on_global_variable_or_write_node_enter(node)
167
161
  handle_global_variable_hover(node.name.to_s)
168
162
  end
169
163
 
170
- sig { params(node: Prism::GlobalVariableReadNode).void }
164
+ #: (Prism::GlobalVariableReadNode node) -> void
171
165
  def on_global_variable_read_node_enter(node)
172
166
  handle_global_variable_hover(node.name.to_s)
173
167
  end
174
168
 
175
- sig { params(node: Prism::GlobalVariableTargetNode).void }
169
+ #: (Prism::GlobalVariableTargetNode node) -> void
176
170
  def on_global_variable_target_node_enter(node)
177
171
  handle_global_variable_hover(node.name.to_s)
178
172
  end
179
173
 
180
- sig { params(node: Prism::GlobalVariableWriteNode).void }
174
+ #: (Prism::GlobalVariableWriteNode node) -> void
181
175
  def on_global_variable_write_node_enter(node)
182
176
  handle_global_variable_hover(node.name.to_s)
183
177
  end
184
178
 
185
- sig { params(node: Prism::InstanceVariableReadNode).void }
179
+ #: (Prism::InstanceVariableReadNode node) -> void
186
180
  def on_instance_variable_read_node_enter(node)
187
181
  handle_instance_variable_hover(node.name.to_s)
188
182
  end
189
183
 
190
- sig { params(node: Prism::InstanceVariableWriteNode).void }
184
+ #: (Prism::InstanceVariableWriteNode node) -> void
191
185
  def on_instance_variable_write_node_enter(node)
192
186
  handle_instance_variable_hover(node.name.to_s)
193
187
  end
194
188
 
195
- sig { params(node: Prism::InstanceVariableAndWriteNode).void }
189
+ #: (Prism::InstanceVariableAndWriteNode node) -> void
196
190
  def on_instance_variable_and_write_node_enter(node)
197
191
  handle_instance_variable_hover(node.name.to_s)
198
192
  end
199
193
 
200
- sig { params(node: Prism::InstanceVariableOperatorWriteNode).void }
194
+ #: (Prism::InstanceVariableOperatorWriteNode node) -> void
201
195
  def on_instance_variable_operator_write_node_enter(node)
202
196
  handle_instance_variable_hover(node.name.to_s)
203
197
  end
204
198
 
205
- sig { params(node: Prism::InstanceVariableOrWriteNode).void }
199
+ #: (Prism::InstanceVariableOrWriteNode node) -> void
206
200
  def on_instance_variable_or_write_node_enter(node)
207
201
  handle_instance_variable_hover(node.name.to_s)
208
202
  end
209
203
 
210
- sig { params(node: Prism::InstanceVariableTargetNode).void }
204
+ #: (Prism::InstanceVariableTargetNode node) -> void
211
205
  def on_instance_variable_target_node_enter(node)
212
206
  handle_instance_variable_hover(node.name.to_s)
213
207
  end
214
208
 
215
- sig { params(node: Prism::SuperNode).void }
209
+ #: (Prism::SuperNode node) -> void
216
210
  def on_super_node_enter(node)
217
211
  handle_super_node_hover
218
212
  end
219
213
 
220
- sig { params(node: Prism::ForwardingSuperNode).void }
214
+ #: (Prism::ForwardingSuperNode node) -> void
221
215
  def on_forwarding_super_node_enter(node)
222
216
  handle_super_node_hover
223
217
  end
224
218
 
225
- sig { params(node: Prism::YieldNode).void }
219
+ #: (Prism::YieldNode node) -> void
226
220
  def on_yield_node_enter(node)
227
221
  handle_keyword_documentation(node.keyword)
228
222
  end
229
223
 
230
- sig { params(node: Prism::ClassVariableAndWriteNode).void }
224
+ #: (Prism::ClassVariableAndWriteNode node) -> void
231
225
  def on_class_variable_and_write_node_enter(node)
232
226
  handle_class_variable_hover(node.name.to_s)
233
227
  end
234
228
 
235
- sig { params(node: Prism::ClassVariableOperatorWriteNode).void }
229
+ #: (Prism::ClassVariableOperatorWriteNode node) -> void
236
230
  def on_class_variable_operator_write_node_enter(node)
237
231
  handle_class_variable_hover(node.name.to_s)
238
232
  end
239
233
 
240
- sig { params(node: Prism::ClassVariableOrWriteNode).void }
234
+ #: (Prism::ClassVariableOrWriteNode node) -> void
241
235
  def on_class_variable_or_write_node_enter(node)
242
236
  handle_class_variable_hover(node.name.to_s)
243
237
  end
244
238
 
245
- sig { params(node: Prism::ClassVariableTargetNode).void }
239
+ #: (Prism::ClassVariableTargetNode node) -> void
246
240
  def on_class_variable_target_node_enter(node)
247
241
  handle_class_variable_hover(node.name.to_s)
248
242
  end
249
243
 
250
- sig { params(node: Prism::ClassVariableReadNode).void }
244
+ #: (Prism::ClassVariableReadNode node) -> void
251
245
  def on_class_variable_read_node_enter(node)
252
246
  handle_class_variable_hover(node.name.to_s)
253
247
  end
254
248
 
255
- sig { params(node: Prism::ClassVariableWriteNode).void }
249
+ #: (Prism::ClassVariableWriteNode node) -> void
256
250
  def on_class_variable_write_node_enter(node)
257
251
  handle_class_variable_hover(node.name.to_s)
258
252
  end
259
253
 
260
254
  private
261
255
 
262
- sig { params(node: T.any(Prism::InterpolatedStringNode, Prism::StringNode)).void }
256
+ #: ((Prism::InterpolatedStringNode | Prism::StringNode) node) -> void
263
257
  def generate_heredoc_hover(node)
264
258
  return unless node.heredoc?
265
259
 
@@ -284,7 +278,7 @@ module RubyLsp
284
278
  end
285
279
  end
286
280
 
287
- sig { params(keyword: String).void }
281
+ #: (String keyword) -> void
288
282
  def handle_keyword_documentation(keyword)
289
283
  content = KEYWORD_DOCS[keyword]
290
284
  return unless content
@@ -296,10 +290,10 @@ module RubyLsp
296
290
  @response_builder.push(content, category: :documentation)
297
291
  end
298
292
 
299
- sig { void }
293
+ #: -> void
300
294
  def handle_super_node_hover
301
295
  # Sorbet can handle super hover on typed true or higher
302
- return if sorbet_level_true_or_higher?(@sorbet_level)
296
+ return if @sorbet_level.true_or_higher?
303
297
 
304
298
  surrounding_method = @node_context.surrounding_method
305
299
  return unless surrounding_method
@@ -307,7 +301,7 @@ module RubyLsp
307
301
  handle_method_hover(surrounding_method, inherited_only: true)
308
302
  end
309
303
 
310
- sig { params(message: String, inherited_only: T::Boolean).void }
304
+ #: (String message, ?inherited_only: bool) -> void
311
305
  def handle_method_hover(message, inherited_only: false)
312
306
  type = @type_inferrer.infer_receiver_type(@node_context)
313
307
  return unless type
@@ -315,7 +309,7 @@ module RubyLsp
315
309
  methods = @index.resolve_method(message, type.name, inherited_only: inherited_only)
316
310
  return unless methods
317
311
 
318
- first_method = T.must(methods.first)
312
+ first_method = methods.first #: as !nil
319
313
 
320
314
  title = "#{message}#{first_method.decorated_parameters}"
321
315
  title << first_method.formatted_signatures
@@ -330,11 +324,11 @@ module RubyLsp
330
324
  end
331
325
  end
332
326
 
333
- sig { params(name: String).void }
327
+ #: (String name) -> void
334
328
  def handle_instance_variable_hover(name)
335
329
  # Sorbet enforces that all instance variables be declared on typed strict or higher, which means it will be able
336
330
  # to provide all features for them
337
- return if @sorbet_level == RubyDocument::SorbetLevel::Strict
331
+ return if @sorbet_level.strict?
338
332
 
339
333
  type = @type_inferrer.infer_receiver_type(@node_context)
340
334
  return unless type
@@ -349,7 +343,7 @@ module RubyLsp
349
343
  # If by any chance we haven't indexed the owner, then there's no way to find the right declaration
350
344
  end
351
345
 
352
- sig { params(name: String).void }
346
+ #: (String name) -> void
353
347
  def handle_global_variable_hover(name)
354
348
  entries = @index[name]
355
349
  return unless entries
@@ -359,7 +353,7 @@ module RubyLsp
359
353
  end
360
354
  end
361
355
 
362
- sig { params(name: String).void }
356
+ #: (String name) -> void
363
357
  def handle_class_variable_hover(name)
364
358
  type = @type_inferrer.infer_receiver_type(@node_context)
365
359
  return unless type
@@ -374,22 +368,23 @@ module RubyLsp
374
368
  # If by any chance we haven't indexed the owner, then there's no way to find the right declaration
375
369
  end
376
370
 
377
- sig { params(name: String, location: Prism::Location).void }
371
+ #: (String name, Prism::Location location) -> void
378
372
  def generate_hover(name, location)
379
373
  entries = @index.resolve(name, @node_context.nesting)
380
374
  return unless entries
381
375
 
382
376
  # We should only show hover for private constants if the constant is defined in the same namespace as the
383
377
  # reference
384
- first_entry = T.must(entries.first)
385
- return if first_entry.private? && first_entry.name != "#{@node_context.fully_qualified_name}::#{name}"
378
+ first_entry = entries.first #: as !nil
379
+ full_name = first_entry.name
380
+ return if first_entry.private? && full_name != "#{@node_context.fully_qualified_name}::#{name}"
386
381
 
387
- categorized_markdown_from_index_entries(name, entries).each do |category, content|
382
+ categorized_markdown_from_index_entries(full_name, entries).each do |category, content|
388
383
  @response_builder.push(content, category: category)
389
384
  end
390
385
  end
391
386
 
392
- sig { params(node: Prism::CallNode).void }
387
+ #: (Prism::CallNode node) -> void
393
388
  def generate_gem_hover(node)
394
389
  first_argument = node.arguments&.arguments&.first
395
390
  return unless first_argument.is_a?(Prism::StringNode)
@@ -397,14 +392,11 @@ module RubyLsp
397
392
  spec = Gem::Specification.find_by_name(first_argument.content)
398
393
  return unless spec
399
394
 
400
- info = T.let(
401
- [
402
- spec.description,
403
- spec.summary,
404
- "This rubygem does not have a description or summary.",
405
- ].find { |text| !text.nil? && !text.empty? },
406
- String,
407
- )
395
+ info = [
396
+ spec.description,
397
+ spec.summary,
398
+ "This rubygem does not have a description or summary.",
399
+ ].find { |text| !text.nil? && !text.empty? } #: String
408
400
 
409
401
  # Remove leading whitespace if a heredoc was used for the summary or description
410
402
  info = info.gsub(/^ +/, "")
@@ -4,26 +4,21 @@
4
4
  module RubyLsp
5
5
  module Listeners
6
6
  class InlayHints
7
- extend T::Sig
8
7
  include Requests::Support::Common
9
8
 
10
- RESCUE_STRING_LENGTH = T.let("rescue".length, Integer)
9
+ RESCUE_STRING_LENGTH = "rescue".length #: Integer
11
10
 
12
- sig do
13
- params(
14
- response_builder: ResponseBuilders::CollectionResponseBuilder[Interface::InlayHint],
15
- hints_configuration: RequestConfig,
16
- dispatcher: Prism::Dispatcher,
17
- ).void
18
- end
19
- def initialize(response_builder, hints_configuration, dispatcher)
11
+ #: (GlobalState, ResponseBuilders::CollectionResponseBuilder[Interface::InlayHint], Prism::Dispatcher) -> void
12
+ def initialize(global_state, response_builder, dispatcher)
20
13
  @response_builder = response_builder
21
- @hints_configuration = hints_configuration
14
+ @hints_configuration = ( # rubocop:disable Style/RedundantParentheses
15
+ global_state.feature_configuration(:inlayHint) #: as !nil
16
+ ) #: RequestConfig
22
17
 
23
18
  dispatcher.register(self, :on_rescue_node_enter, :on_implicit_node_enter)
24
19
  end
25
20
 
26
- sig { params(node: Prism::RescueNode).void }
21
+ #: (Prism::RescueNode node) -> void
27
22
  def on_rescue_node_enter(node)
28
23
  return unless @hints_configuration.enabled?(:implicitRescue)
29
24
  return unless node.exceptions.empty?
@@ -38,7 +33,7 @@ module RubyLsp
38
33
  )
39
34
  end
40
35
 
41
- sig { params(node: Prism::ImplicitNode).void }
36
+ #: (Prism::ImplicitNode node) -> void
42
37
  def on_implicit_node_enter(node)
43
38
  return unless @hints_configuration.enabled?(:implicitHashValue)
44
39