@@ -11,6 +11,7 @@ class SorbetSigsToRBSComments < Translator
1111 #| String,
1212 #| file: String,
1313 #| positional_names: bool,
14+ #| ?preserve_multiline_signatures: bool,
1415 #| ?max_line_length: Integer?,
1516 #| ?translate_generics: bool,
1617 #| ?translate_helpers: bool,
@@ -20,6 +21,7 @@ def initialize(
2021 ruby_contents ,
2122 file :,
2223 positional_names :,
24+ preserve_multiline_signatures : true ,
2325 max_line_length : nil ,
2426 translate_generics : true ,
2527 translate_helpers : true ,
@@ -34,6 +36,8 @@ def initialize(
3436 @extend_t_helpers = [ ] #: Array[Prism::CallNode]
3537 @extend_t_generics = [ ] #: Array[Prism::CallNode]
3638 @seen_mixes_in_class_methods = false #: bool
39+
40+ @preserve_multiline_signatures = preserve_multiline_signatures
3741 @max_line_length = max_line_length #: Integer?
3842
3943 @translate_generics = translate_generics #: bool
@@ -75,7 +79,12 @@ def visit_def_node(node)
7579 last_sigs . each do |node , sig |
7680 next if sig . is_abstract && !@translate_abstract_methods
7781
78- out = rbs_print ( node . location . start_column ) do |printer |
82+ preserve_multiline_signatures = !!( @preserve_multiline_signatures && sig . loc &.multiline? )
83+
84+ out = rbs_print (
85+ node . location . start_column ,
86+ preserve_multiline_signatures : preserve_multiline_signatures ,
87+ ) do |printer |
7988 printer . print_method_sig ( rbi_node , sig )
8089 end
8190 @rewriter << Source ::Replace . new ( node . location . start_offset , node . location . end_offset , out )
@@ -204,7 +213,7 @@ def visit_attr(node)
204213 rbi_node = builder . tree . nodes . first #: as RBI::Attr
205214
206215 last_sigs . each do |node , sig |
207- out = rbs_print ( node . location . start_column ) do |printer |
216+ out = rbs_print ( node . location . start_column , preserve_multiline_signatures : false ) do |printer |
208217 printer . print_attr_sig ( rbi_node , sig )
209218 end
210219 @rewriter << Source ::Replace . new ( node . location . start_offset , node . location . end_offset , out )
@@ -387,10 +396,16 @@ def collect_last_sigs
387396 last_sigs
388397 end
389398
390- #: (Integer) { (RBI::RBSPrinter) -> void } -> String
391- def rbs_print ( indent , &block )
399+ #: (Integer, preserve_multiline_signatures: bool ) { (RBI::RBSPrinter) -> void } -> String
400+ def rbs_print ( indent , preserve_multiline_signatures : , &block )
392401 out = StringIO . new
393- p = RBI ::RBSPrinter . new ( out : out , positional_names : @positional_names , max_line_length : @max_line_length )
402+
403+ p = RBI ::RBSPrinter . new (
404+ out : out ,
405+ positional_names : @positional_names ,
406+ max_line_length : @max_line_length ,
407+ force_multiline_signatures : preserve_multiline_signatures ,
408+ )
394409 block . call ( p )
395410 string = out . string
396411
0 commit comments