diff --git a/lib/spoom/deadcode/plugins/minitest.rb b/lib/spoom/deadcode/plugins/minitest.rb index a69dd751..4cecbdf4 100644 --- a/lib/spoom/deadcode/plugins/minitest.rb +++ b/lib/spoom/deadcode/plugins/minitest.rb @@ -22,6 +22,15 @@ class Minitest < Base def on_define_method(indexer, definition) definition.ignored! if indexer.path.match?(%r{test/.*test\.rb$}) && definition.name.match?(/^test_/) end + + sig { override.params(indexer: Indexer, send: Send).void } + def on_send(indexer, send) + return unless send.recv.nil? && send.name == "setup" + + send.each_arg(SyntaxTree::SymbolLiteral) do |arg| + indexer.reference_method(indexer.node_string(arg.value), send.node) + end + end end end end diff --git a/test/spoom/deadcode/plugins/minitest_test.rb b/test/spoom/deadcode/plugins/minitest_test.rb index 6f2a2fe7..3988d061 100644 --- a/test/spoom/deadcode/plugins/minitest_test.rb +++ b/test/spoom/deadcode/plugins/minitest_test.rb @@ -57,6 +57,24 @@ def some_other_test; end refute_ignored(index, "some_other_test") end + def test_ignore_minitest_setup_with_symbol + @project.write!("test/foo_test.rb", <<~RB) + class FooTest + setup(:alive1) + setup(:alive2) + + def alive1; end + def alive2; end + def dead; end + end + RB + + index = index_with_plugins + assert_alive(index, "alive1") + assert_alive(index, "alive2") + assert_dead(index, "dead") + end + private sig { returns(Deadcode::Index) }