Skip to content

Commit 5a878da

Browse files
authored
Merge pull request #450 from Shopify/at-formatter-attr
Add `replace_attributes_with_methods` option to RBI::Formatter
2 parents 3165e72 + 3fdf006 commit 5a878da

3 files changed

Lines changed: 29 additions & 4 deletions

File tree

lib/rbi/formatter.rb

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,23 @@ class Formatter
66
#: Integer?
77
attr_accessor :max_line_length
88

9-
#: (?add_sig_templates: bool, ?group_nodes: bool, ?max_line_length: Integer?, ?nest_singleton_methods: bool, ?nest_non_public_members: bool, ?sort_nodes: bool) -> void
9+
#: (?add_sig_templates: bool, ?group_nodes: bool, ?max_line_length: Integer?, ?nest_singleton_methods: bool, ?nest_non_public_members: bool, ?sort_nodes: bool, ?replace_attributes_with_methods: bool) -> void
1010
def initialize(
1111
add_sig_templates: false,
1212
group_nodes: false,
1313
max_line_length: nil,
1414
nest_singleton_methods: false,
1515
nest_non_public_members: false,
16-
sort_nodes: false
16+
sort_nodes: false,
17+
replace_attributes_with_methods: false
1718
)
1819
@add_sig_templates = add_sig_templates
1920
@group_nodes = group_nodes
2021
@max_line_length = max_line_length
2122
@nest_singleton_methods = nest_singleton_methods
2223
@nest_non_public_members = nest_non_public_members
2324
@sort_nodes = sort_nodes
25+
@replace_attributes_with_methods = replace_attributes_with_methods
2426
end
2527

2628
#: (RBI::File file) -> String
@@ -36,6 +38,7 @@ def format_file(file)
3638

3739
#: (RBI::Tree tree) -> void
3840
def format_tree(tree)
41+
tree.replace_attributes_with_methods! if @replace_attributes_with_methods
3942
tree.add_sig_templates! if @add_sig_templates
4043
tree.nest_singleton_methods! if @nest_singleton_methods
4144
tree.nest_non_public_members! if @nest_non_public_members

rbi/rbi.rbi

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -403,10 +403,11 @@ class RBI::Formatter
403403
max_line_length: T.nilable(::Integer),
404404
nest_singleton_methods: T::Boolean,
405405
nest_non_public_members: T::Boolean,
406-
sort_nodes: T::Boolean
406+
sort_nodes: T::Boolean,
407+
replace_attributes_with_methods: T::Boolean
407408
).void
408409
end
409-
def initialize(add_sig_templates: T.unsafe(nil), group_nodes: T.unsafe(nil), max_line_length: T.unsafe(nil), nest_singleton_methods: T.unsafe(nil), nest_non_public_members: T.unsafe(nil), sort_nodes: T.unsafe(nil)); end
410+
def initialize(add_sig_templates: T.unsafe(nil), group_nodes: T.unsafe(nil), max_line_length: T.unsafe(nil), nest_singleton_methods: T.unsafe(nil), nest_non_public_members: T.unsafe(nil), sort_nodes: T.unsafe(nil), replace_attributes_with_methods: T.unsafe(nil)); end
410411

411412
sig { params(file: ::RBI::File).void }
412413
def format_file(file); end

test/rbi/formatter_test.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,27 @@ def foo(a, b); end
3030
RBI
3131
end
3232

33+
def test_format_replace_attributes_with_methods
34+
rbi = <<~RBI
35+
module Foo
36+
attr_reader :a
37+
end
38+
RBI
39+
40+
file = File.new
41+
file.root = parse_rbi(rbi)
42+
43+
out = Formatter.new(replace_attributes_with_methods: false).print_file(file)
44+
assert_equal(rbi, out)
45+
46+
out = Formatter.new(replace_attributes_with_methods: true).print_file(file)
47+
assert_equal(<<~RBI, out)
48+
module Foo
49+
def a; end
50+
end
51+
RBI
52+
end
53+
3354
def test_format_group_nodes
3455
rbi = <<~RBI
3556
module Foo

0 commit comments

Comments
 (0)