diff --git a/lib/spoom/sorbet/translate/sorbet_sigs_to_rbs_comments.rb b/lib/spoom/sorbet/translate/sorbet_sigs_to_rbs_comments.rb index 5df9c7f7..0425bda6 100644 --- a/lib/spoom/sorbet/translate/sorbet_sigs_to_rbs_comments.rb +++ b/lib/spoom/sorbet/translate/sorbet_sigs_to_rbs_comments.rb @@ -101,7 +101,8 @@ def visit_def_node(node) @rewriter << Source::Replace.new( header.end_offset, node.location.end_offset - 1, - if node.name.end_with?("=") || (node.parameters && !node.rparen_loc) + if node.name.end_with?("=") || (node.parameters && !node.rparen_loc) || + header.end_line != node.name_loc.start_line indent = " " * node.location.start_column "#{header_comment}\n#{indent} super\n#{indent}end" else diff --git a/test/spoom/sorbet/translate/sorbet_sigs_to_rbs_comments_test.rb b/test/spoom/sorbet/translate/sorbet_sigs_to_rbs_comments_test.rb index 3af06108..513175b9 100644 --- a/test/spoom/sorbet/translate/sorbet_sigs_to_rbs_comments_test.rb +++ b/test/spoom/sorbet/translate/sorbet_sigs_to_rbs_comments_test.rb @@ -195,6 +195,32 @@ def value= value # Keep the setter comment assert_equal(42, instance.value) end + def test_translate_to_rbs_abstract_method_with_multiline_parameters + contents = <<~RB + class Foo + sig { abstract.params(query: Integer, options: String).returns(Integer) } + def find( + query:, + options: + ) # Keep the header comment + end + end + RB + + assert_equal(<<~RBS, sorbet_sigs_to_rbs_comments(contents)) + class Foo + # @abstract + #: (query: Integer, options: String) -> Integer + def find( + query:, + options: + ) # Keep the header comment + super + end + end + RBS + end + def test_translate_to_rbs_skips_abstract_methods_without_runtime contents = <<~RB class Foo