Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ PATH
spoom (1.8.3)
erubi (>= 1.10.0)
prism (>= 0.28.0)
rbi (>= 0.3.14)
rbi (>= 0.3.15)
rbs (>= 4.0.0.dev.5)
rexml (>= 3.2.6)
sorbet-static-and-runtime (>= 0.5.10187)
Expand Down Expand Up @@ -57,7 +57,7 @@ GEM
racc (1.8.1)
rainbow (3.1.1)
rake (13.4.2)
rbi (0.3.14)
rbi (0.3.15)
prism (~> 1.0)
rbs (>= 4.0.1)
rbs (4.0.3)
Expand Down
5 changes: 5 additions & 0 deletions lib/spoom/cli/srb/sigs.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ class Sigs < Thor
aliases: :p,
desc: "Use positional names when translating from RBI to RBS",
default: true
option :preserve_multiline_signatures,
type: :boolean,
desc: "Preserve multiline sig formatting when translating from RBI to RBS",
default: true
option :include_rbi_files, type: :boolean, desc: "Include RBI files", default: false
option :max_line_length, type: :numeric, desc: "Max line length (pass 0 to disable)", default: 120
option :translate_generics, type: :boolean, desc: "Translate generics", default: false
Expand Down Expand Up @@ -53,6 +57,7 @@ def translate(*paths)
contents,
file: file,
positional_names: options[:positional_names],
preserve_multiline_signatures: options[:preserve_multiline_signatures],
max_line_length: max_line_length,
translate_generics: options[:translate_generics],
translate_helpers: options[:translate_helpers],
Expand Down
7 changes: 6 additions & 1 deletion lib/spoom/sorbet/translate.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,17 @@ def strip_sorbet_sigs(ruby_contents, file:)
#| String,
#| file: String,
#| ?positional_names: bool,
#| ?preserve_multiline_signatures: bool,
#| ?max_line_length: Integer?,
#| ?translate_generics: bool,
#| ?translate_helpers: bool,
#| ?translate_abstract_methods: bool
#| ) -> String
def sorbet_sigs_to_rbs_comments(
ruby_contents, file:, positional_names: true, max_line_length: nil,
ruby_contents, file:,
positional_names: true,
preserve_multiline_signatures: true,
max_line_length: nil,
translate_generics: true,
translate_helpers: true,
translate_abstract_methods: true
Expand All @@ -45,6 +49,7 @@ def sorbet_sigs_to_rbs_comments(
ruby_contents,
file: file,
positional_names: positional_names,
preserve_multiline_signatures: preserve_multiline_signatures,
max_line_length: max_line_length,
translate_generics: translate_generics,
translate_helpers: translate_helpers,
Expand Down
25 changes: 20 additions & 5 deletions lib/spoom/sorbet/translate/sorbet_sigs_to_rbs_comments.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class SorbetSigsToRBSComments < Translator
#| String,
#| file: String,
#| positional_names: bool,
#| ?preserve_multiline_signatures: bool,
#| ?max_line_length: Integer?,
#| ?translate_generics: bool,
#| ?translate_helpers: bool,
Expand All @@ -20,6 +21,7 @@ def initialize(
ruby_contents,
file:,
positional_names:,
preserve_multiline_signatures: true,
max_line_length: nil,
translate_generics: true,
translate_helpers: true,
Expand All @@ -34,6 +36,8 @@ def initialize(
@extend_t_helpers = [] #: Array[Prism::CallNode]
@extend_t_generics = [] #: Array[Prism::CallNode]
@seen_mixes_in_class_methods = false #: bool

@preserve_multiline_signatures = preserve_multiline_signatures
@max_line_length = max_line_length #: Integer?

@translate_generics = translate_generics #: bool
Expand Down Expand Up @@ -75,7 +79,12 @@ def visit_def_node(node)
last_sigs.each do |node, sig|
next if sig.is_abstract && !@translate_abstract_methods

out = rbs_print(node.location.start_column) do |printer|
preserve_multiline_signatures = !!(@preserve_multiline_signatures && sig.loc&.multiline?)

out = rbs_print(
node.location.start_column,
preserve_multiline_signatures: preserve_multiline_signatures,
) do |printer|
printer.print_method_sig(rbi_node, sig)
end
@rewriter << Source::Replace.new(node.location.start_offset, node.location.end_offset, out)
Expand Down Expand Up @@ -204,7 +213,7 @@ def visit_attr(node)
rbi_node = builder.tree.nodes.first #: as RBI::Attr

last_sigs.each do |node, sig|
out = rbs_print(node.location.start_column) do |printer|
out = rbs_print(node.location.start_column, preserve_multiline_signatures: false) do |printer|
printer.print_attr_sig(rbi_node, sig)
end
@rewriter << Source::Replace.new(node.location.start_offset, node.location.end_offset, out)
Expand Down Expand Up @@ -387,10 +396,16 @@ def collect_last_sigs
last_sigs
end

#: (Integer) { (RBI::RBSPrinter) -> void } -> String
def rbs_print(indent, &block)
#: (Integer, preserve_multiline_signatures: bool) { (RBI::RBSPrinter) -> void } -> String
def rbs_print(indent, preserve_multiline_signatures:, &block)
out = StringIO.new
p = RBI::RBSPrinter.new(out: out, positional_names: @positional_names, max_line_length: @max_line_length)

p = RBI::RBSPrinter.new(
out: out,
positional_names: @positional_names,
max_line_length: @max_line_length,
force_multiline_signatures: preserve_multiline_signatures,
)
block.call(p)
string = out.string

Expand Down
16 changes: 12 additions & 4 deletions rbi/spoom.rbi
Original file line number Diff line number Diff line change
Expand Up @@ -2949,13 +2949,14 @@ module Spoom::Sorbet::Translate
ruby_contents: ::String,
file: ::String,
positional_names: T::Boolean,
preserve_multiline_signatures: T::Boolean,
max_line_length: T.nilable(::Integer),
translate_generics: T::Boolean,
translate_helpers: T::Boolean,
translate_abstract_methods: T::Boolean
).returns(::String)
end
def sorbet_sigs_to_rbs_comments(ruby_contents, file:, positional_names: T.unsafe(nil), max_line_length: T.unsafe(nil), translate_generics: T.unsafe(nil), translate_helpers: T.unsafe(nil), translate_abstract_methods: T.unsafe(nil)); end
def sorbet_sigs_to_rbs_comments(ruby_contents, file:, positional_names: T.unsafe(nil), preserve_multiline_signatures: T.unsafe(nil), max_line_length: T.unsafe(nil), translate_generics: T.unsafe(nil), translate_helpers: T.unsafe(nil), translate_abstract_methods: T.unsafe(nil)); end

sig { params(ruby_contents: ::String, file: ::String).returns(::String) }
def strip_sorbet_sigs(ruby_contents, file:); end
Expand Down Expand Up @@ -3324,13 +3325,14 @@ class Spoom::Sorbet::Translate::SorbetSigsToRBSComments < ::Spoom::Sorbet::Trans
ruby_contents: ::String,
file: ::String,
positional_names: T::Boolean,
preserve_multiline_signatures: T::Boolean,
max_line_length: T.nilable(::Integer),
translate_generics: T::Boolean,
translate_helpers: T::Boolean,
translate_abstract_methods: T::Boolean
).void
end
def initialize(ruby_contents, file:, positional_names:, max_line_length: T.unsafe(nil), translate_generics: T.unsafe(nil), translate_helpers: T.unsafe(nil), translate_abstract_methods: T.unsafe(nil)); end
def initialize(ruby_contents, file:, positional_names:, preserve_multiline_signatures: T.unsafe(nil), max_line_length: T.unsafe(nil), translate_generics: T.unsafe(nil), translate_helpers: T.unsafe(nil), translate_abstract_methods: T.unsafe(nil)); end

sig { override.params(node: ::Prism::CallNode).void }
def visit_call_node(node); end
Expand Down Expand Up @@ -3375,8 +3377,14 @@ class Spoom::Sorbet::Translate::SorbetSigsToRBSComments < ::Spoom::Sorbet::Trans
sig { void }
def delete_extend_t_helpers; end

sig { params(indent: ::Integer, block: T.proc.params(arg0: ::RBI::RBSPrinter).void).returns(::String) }
def rbs_print(indent, &block); end
sig do
params(
indent: ::Integer,
preserve_multiline_signatures: T::Boolean,
block: T.proc.params(arg0: ::RBI::RBSPrinter).void
).returns(::String)
end
def rbs_print(indent, preserve_multiline_signatures:, &block); end

sig { params(node: ::Prism::CallNode).void }
def visit_attr(node); end
Expand Down
Loading
Loading