Skip to content

Commit 5a9ff93

Browse files
authored
Register all test discovery listener events in one go (#3582)
1 parent af30123 commit 5a9ff93

File tree

3 files changed

+31
-28
lines changed

3 files changed

+31
-28
lines changed

lib/ruby_lsp/listeners/spec_style.rb

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,20 @@ class DescribeGroup < Group; end
1919

2020
#: (ResponseBuilders::TestCollection, GlobalState, Prism::Dispatcher, URI::Generic) -> void
2121
def initialize(response_builder, global_state, dispatcher, uri)
22-
super
22+
super(response_builder, global_state, uri)
2323

2424
@spec_group_id_stack = [] #: Array[Group?]
2525

26-
dispatcher.register(
27-
self,
28-
# Common handlers registered in parent class
26+
register_events(
27+
dispatcher,
2928
:on_class_node_enter,
30-
:on_call_node_enter, # e.g. `describe` or `it`
29+
:on_call_node_enter,
3130
:on_call_node_leave,
3231
)
3332
end
3433

3534
#: (Prism::ClassNode) -> void
36-
def on_class_node_enter(node)
35+
def on_class_node_enter(node) # rubocop:disable RubyLsp/UseRegisterWithHandlerMethod
3736
with_test_ancestor_tracking(node) do |name, ancestors|
3837
@spec_group_id_stack << (ancestors.include?("Minitest::Spec") ? ClassGroup.new(name) : nil)
3938
end
@@ -58,7 +57,7 @@ def on_module_node_leave(node) # rubocop:disable RubyLsp/UseRegisterWithHandlerM
5857
end
5958

6059
#: (Prism::CallNode) -> void
61-
def on_call_node_enter(node)
60+
def on_call_node_enter(node) # rubocop:disable RubyLsp/UseRegisterWithHandlerMethod
6261
return unless in_spec_context?
6362

6463
case node.name
@@ -70,7 +69,7 @@ def on_call_node_enter(node)
7069
end
7170

7271
#: (Prism::CallNode) -> void
73-
def on_call_node_leave(node)
72+
def on_call_node_leave(node) # rubocop:disable RubyLsp/UseRegisterWithHandlerMethod
7473
return unless node.name == :describe && !node.receiver
7574

7675
current_group = @spec_group_id_stack.last

lib/ruby_lsp/listeners/test_discovery.rb

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,24 +9,17 @@ class TestDiscovery
99

1010
DYNAMIC_REFERENCE_MARKER = "<dynamic_reference>"
1111

12-
#: (ResponseBuilders::TestCollection response_builder, GlobalState global_state, Prism::Dispatcher dispatcher, URI::Generic uri) -> void
13-
def initialize(response_builder, global_state, dispatcher, uri)
12+
#: (ResponseBuilders::TestCollection response_builder, GlobalState global_state, URI::Generic uri) -> void
13+
def initialize(response_builder, global_state, uri)
1414
@response_builder = response_builder
1515
@uri = uri
1616
@index = global_state.index #: RubyIndexer::Index
1717
@visibility_stack = [:public] #: Array[Symbol]
1818
@nesting = [] #: Array[String]
19-
20-
dispatcher.register(
21-
self,
22-
:on_class_node_leave,
23-
:on_module_node_enter,
24-
:on_module_node_leave,
25-
)
2619
end
2720

2821
#: (Prism::ModuleNode node) -> void
29-
def on_module_node_enter(node)
22+
def on_module_node_enter(node) # rubocop:disable RubyLsp/UseRegisterWithHandlerMethod
3023
@visibility_stack << :public
3124

3225
name = constant_name(node.constant_path)
@@ -36,19 +29,31 @@ def on_module_node_enter(node)
3629
end
3730

3831
#: (Prism::ModuleNode node) -> void
39-
def on_module_node_leave(node)
32+
def on_module_node_leave(node) # rubocop:disable RubyLsp/UseRegisterWithHandlerMethod
4033
@visibility_stack.pop
4134
@nesting.pop
4235
end
4336

4437
#: (Prism::ClassNode node) -> void
45-
def on_class_node_leave(node)
38+
def on_class_node_leave(node) # rubocop:disable RubyLsp/UseRegisterWithHandlerMethod
4639
@visibility_stack.pop
4740
@nesting.pop
4841
end
4942

5043
private
5144

45+
#: (Prism::Dispatcher, *Symbol) -> void
46+
def register_events(dispatcher, *events)
47+
unique_events = events.dup.push(
48+
:on_class_node_leave,
49+
:on_module_node_enter,
50+
:on_module_node_leave,
51+
)
52+
53+
unique_events.uniq!
54+
dispatcher.register(self, *unique_events)
55+
end
56+
5257
#: (String? name) -> String
5358
def calc_fully_qualified_name(name)
5459
RubyIndexer::Index.actual_nesting(@nesting, name).join("::")

lib/ruby_lsp/listeners/test_style.rb

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -153,14 +153,13 @@ def handle_test_unit_groups(file_path, groups_and_examples)
153153

154154
#: (ResponseBuilders::TestCollection, GlobalState, Prism::Dispatcher, URI::Generic) -> void
155155
def initialize(response_builder, global_state, dispatcher, uri)
156-
super
156+
super(response_builder, global_state, uri)
157157

158158
@framework = :minitest #: Symbol
159159
@parent_stack = [@response_builder] #: Array[(Requests::Support::TestItem | ResponseBuilders::TestCollection)?]
160160

161-
dispatcher.register(
162-
self,
163-
# Common handlers registered in parent class
161+
register_events(
162+
dispatcher,
164163
:on_class_node_enter,
165164
:on_def_node_enter,
166165
:on_call_node_enter,
@@ -169,7 +168,7 @@ def initialize(response_builder, global_state, dispatcher, uri)
169168
end
170169

171170
#: (Prism::ClassNode node) -> void
172-
def on_class_node_enter(node)
171+
def on_class_node_enter(node) # rubocop:disable RubyLsp/UseRegisterWithHandlerMethod
173172
with_test_ancestor_tracking(node) do |name, ancestors|
174173
@framework = :test_unit if ancestors.include?("Test::Unit::TestCase")
175174

@@ -210,7 +209,7 @@ def on_module_node_leave(node) # rubocop:disable RubyLsp/UseRegisterWithHandlerM
210209
end
211210

212211
#: (Prism::DefNode node) -> void
213-
def on_def_node_enter(node)
212+
def on_def_node_enter(node) # rubocop:disable RubyLsp/UseRegisterWithHandlerMethod
214213
return if @visibility_stack.last != :public
215214

216215
name = node.name.to_s
@@ -232,15 +231,15 @@ def on_def_node_enter(node)
232231
end
233232

234233
#: (Prism::CallNode node) -> void
235-
def on_call_node_enter(node)
234+
def on_call_node_enter(node) # rubocop:disable RubyLsp/UseRegisterWithHandlerMethod
236235
name = node.name
237236
return unless ACCESS_MODIFIERS.include?(name)
238237

239238
@visibility_stack << name
240239
end
241240

242241
#: (Prism::CallNode node) -> void
243-
def on_call_node_leave(node)
242+
def on_call_node_leave(node) # rubocop:disable RubyLsp/UseRegisterWithHandlerMethod
244243
name = node.name
245244
return unless ACCESS_MODIFIERS.include?(name)
246245
return unless node.arguments&.arguments

0 commit comments

Comments
 (0)