Skip to content

Commit ab5ed7e

Browse files
thomasklemmclaude
andauthored
[fix] Format singleton class expression instead of hardcoding self (#876)
`format_singleton_class_node` emitted a hardcoded `self` identifier regardless of the actual receiver expression, silently rewriting `class << obj` to `class << self`. Now formats the AST expression node directly, preserving whatever receiver the user wrote. Fixes #874 Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 94566e5 commit ab5ed7e

3 files changed

Lines changed: 74 additions & 1 deletion

File tree

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class << self
2+
def foo; end
3+
end
4+
5+
class << receiver
6+
def foo; :bar; end
7+
end
8+
9+
class << @ivar
10+
def foo; end
11+
end
12+
13+
class << @@cvar
14+
def foo; end
15+
end
16+
17+
class << $global
18+
def foo; end
19+
end
20+
21+
class << Foo
22+
def foo; end
23+
end
24+
25+
class << SomeModule::CONST
26+
def foo; end
27+
end
28+
29+
class << foo.bar
30+
def foo; end
31+
end
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class << self
2+
def foo
3+
end
4+
end
5+
6+
class << receiver
7+
def foo
8+
:bar
9+
end
10+
end
11+
12+
class << @ivar
13+
def foo
14+
end
15+
end
16+
17+
class << @@cvar
18+
def foo
19+
end
20+
end
21+
22+
class << $global
23+
def foo
24+
end
25+
end
26+
27+
class << Foo
28+
def foo
29+
end
30+
end
31+
32+
class << SomeModule::CONST
33+
def foo
34+
end
35+
end
36+
37+
class << foo.bar
38+
def foo
39+
end
40+
end

librubyfmt/src/format_prism.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4765,7 +4765,9 @@ fn format_singleton_class_node<'src>(
47654765
ps.emit_space();
47664766
ps.emit_ident(b"<<");
47674767
ps.emit_space();
4768-
ps.emit_ident(b"self");
4768+
ps.with_start_of_line(false, |ps| {
4769+
format_node(ps, singleton_class_node.expression())
4770+
});
47694771

47704772
ps.new_block(|ps| {
47714773
ps.with_start_of_line(true, |ps| {

0 commit comments

Comments
 (0)