From 2473fe9cf309874c134e632015451e13f8e576e2 Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Tue, 3 Jun 2025 15:30:16 -0400 Subject: [PATCH 1/2] Mark ActiveJob::Callbacks as alive Signed-off-by: Alexandre Terrasa --- lib/spoom/deadcode/plugins/active_job.rb | 19 ++++++++++++ .../spoom/deadcode/plugins/active_job_test.rb | 30 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/lib/spoom/deadcode/plugins/active_job.rb b/lib/spoom/deadcode/plugins/active_job.rb index 4641e965..939088ad 100644 --- a/lib/spoom/deadcode/plugins/active_job.rb +++ b/lib/spoom/deadcode/plugins/active_job.rb @@ -7,6 +7,25 @@ module Plugins class ActiveJob < Base ignore_classes_named("ApplicationJob") ignore_methods_named("perform", "build_enumerator", "each_iteration") + + CALLBACKS = [ + "after_enqueue", + "after_perform", + "around_enqueue", + "around_perform", + "before_enqueue", + "before_perform", + ].freeze + + # @override + #: (Send send) -> void + def on_send(send) + return unless send.recv.nil? && CALLBACKS.include?(send.name) + + send.each_arg(Prism::SymbolNode) do |arg| + @index.reference_method(arg.unescaped, send.location) + end + end end end end diff --git a/test/spoom/deadcode/plugins/active_job_test.rb b/test/spoom/deadcode/plugins/active_job_test.rb index f7358810..582f63c7 100644 --- a/test/spoom/deadcode/plugins/active_job_test.rb +++ b/test/spoom/deadcode/plugins/active_job_test.rb @@ -49,6 +49,36 @@ def perform; end ) end + def test_ignore_active_job_callbacks + @project.write!("app/jobs/foo.rb", <<~RB) + class FooJob + after_enqueue(:ignored1) + after_perform(:ignored2) + around_enqueue(:ignored3) + around_perform(:ignored4) + before_enqueue(:ignored5) + before_perform(:ignored6) + + def ignored1; end + def ignored2; end + def ignored3; end + def ignored4; end + def ignored5; end + def ignored6; end + def dead; end + end + RB + + index = index_with_plugins + assert_alive(index, "ignored1") + assert_alive(index, "ignored2") + assert_alive(index, "ignored3") + assert_alive(index, "ignored4") + assert_alive(index, "ignored5") + assert_alive(index, "ignored6") + assert_dead(index, "dead") + end + private #: -> Deadcode::Index From 94842f1cddfbcd3a18ce7e6c550d57fdecd4b043 Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Tue, 3 Jun 2025 15:55:39 -0400 Subject: [PATCH 2/2] Update exported RBI Signed-off-by: Alexandre Terrasa --- rbi/spoom.rbi | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/rbi/spoom.rbi b/rbi/spoom.rbi index e2ef3c24..b3028b2a 100644 --- a/rbi/spoom.rbi +++ b/rbi/spoom.rbi @@ -1142,7 +1142,13 @@ class Spoom::Deadcode::Plugins::ActionPack < ::Spoom::Deadcode::Plugins::Base end Spoom::Deadcode::Plugins::ActionPack::CALLBACKS = T.let(T.unsafe(nil), Array) -class Spoom::Deadcode::Plugins::ActiveJob < ::Spoom::Deadcode::Plugins::Base; end + +class Spoom::Deadcode::Plugins::ActiveJob < ::Spoom::Deadcode::Plugins::Base + sig { override.params(send: ::Spoom::Deadcode::Send).void } + def on_send(send); end +end + +Spoom::Deadcode::Plugins::ActiveJob::CALLBACKS = T.let(T.unsafe(nil), Array) class Spoom::Deadcode::Plugins::ActiveModel < ::Spoom::Deadcode::Plugins::Base sig { override.params(send: ::Spoom::Deadcode::Send).void }