Skip to content

Commit 5e302a0

Browse files
committed
Handle abstract setters
Signed-off-by: Alexandre Terrasa <alexandre.terrasa@shopify.com>
1 parent 19eacbf commit 5e302a0

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

lib/spoom/sorbet/translate/sorbet_sigs_to_rbs_comments.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,12 @@ def visit_def_node(node)
6363
@rewriter << Source::Replace.new(
6464
node.rparen_loc&.end_offset || node.name_loc.end_offset,
6565
node.location.end_offset - 1,
66-
" = raise NotImplementedError, \"Abstract method called\"",
66+
if node.name.end_with?("=")
67+
indent = " " * node.location.start_column
68+
"\n#{indent} raise NotImplementedError, \"Abstract method called\"\n#{indent}end"
69+
else
70+
" = raise NotImplementedError, \"Abstract method called\""
71+
end,
6772
)
6873
end
6974
end

test/spoom/sorbet/translate/sorbet_sigs_to_rbs_comments_test.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,13 @@ def bar; end
8686
sig { abstract.params(x: Integer).void }
8787
def baz(x)
8888
end
89+
90+
sig { abstract.params(x: Integer).void }
91+
def foo=(x); end
92+
93+
sig { abstract.params(x: Integer).void }
94+
def bar=(x)
95+
end
8996
end
9097
RB
9198

@@ -104,6 +111,18 @@ def bar = raise NotImplementedError, "Abstract method called"
104111
# @abstract
105112
#: (Integer x) -> void
106113
def baz(x) = raise NotImplementedError, "Abstract method called"
114+
115+
# @abstract
116+
#: (Integer x) -> void
117+
def foo=(x)
118+
raise NotImplementedError, "Abstract method called"
119+
end
120+
121+
# @abstract
122+
#: (Integer x) -> void
123+
def bar=(x)
124+
raise NotImplementedError, "Abstract method called"
125+
end
107126
end
108127
RBS
109128
end

0 commit comments

Comments
 (0)