From 9a4240a27fc46d7c16ee8bfe01d879220826aa87 Mon Sep 17 00:00:00 2001 From: Alexander Momchilov Date: Thu, 19 Feb 2026 19:01:04 -0500 Subject: [PATCH] Always use `@without_runtime` for `method_added` --- .../translate/rbs_comments_to_sorbet_sigs.rb | 6 ++++ .../rbs_comments_to_sorbet_sigs_test.rb | 30 +++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/lib/spoom/sorbet/translate/rbs_comments_to_sorbet_sigs.rb b/lib/spoom/sorbet/translate/rbs_comments_to_sorbet_sigs.rb index 15b8653d..d5705f4e 100644 --- a/lib/spoom/sorbet/translate/rbs_comments_to_sorbet_sigs.rb +++ b/lib/spoom/sorbet/translate/rbs_comments_to_sorbet_sigs.rb @@ -139,6 +139,12 @@ def rewrite_def(def_node, comments) apply_member_annotations(comments.method_annotations, sig) + # Sorbet runtime doesn't support `sig` on `method_added` or + # `singleton_method_added`, so we always use `without_runtime` for them. + if def_node.name == :method_added || def_node.name == :singleton_method_added + sig.without_runtime = true + end + @rewriter << Source::Replace.new( signature.location.start_offset, signature.location.end_offset, diff --git a/test/spoom/sorbet/translate/rbs_comments_to_sorbet_sigs_test.rb b/test/spoom/sorbet/translate/rbs_comments_to_sorbet_sigs_test.rb index b76b63be..82327acb 100644 --- a/test/spoom/sorbet/translate/rbs_comments_to_sorbet_sigs_test.rb +++ b/test/spoom/sorbet/translate/rbs_comments_to_sorbet_sigs_test.rb @@ -124,6 +124,36 @@ def foo; end RB end + def test_translate_to_rbi_method_added_is_always_without_runtime + contents = <<~RB + class A + class << self + # @override + #: (Symbol) -> void + def method_added(m); end + + # @override + #: (Symbol) -> void + def singleton_method_added(m); end + end + end + RB + + assert_equal(<<~RB, rbs_comments_to_sorbet_sigs(contents)) + class A + class << self + # @override + T::Sig::WithoutRuntime.sig { override.params(m: Symbol).void } + def method_added(m); end + + # @override + T::Sig::WithoutRuntime.sig { override.params(m: Symbol).void } + def singleton_method_added(m); end + end + end + RB + end + def test_translate_to_rbi_singleton_method_sigs contents = <<~RB class A