diff --git a/lib/syntax_tree/node.rb b/lib/syntax_tree/node.rb index cdc8856b..bd3f915f 100644 --- a/lib/syntax_tree/node.rb +++ b/lib/syntax_tree/node.rb @@ -2066,7 +2066,12 @@ def format(q) part = arguments.parts.first if part.is_a?(Paren) - q.format(arguments) + if part.contents.body.length == 1 && skip_parens?(part.contents.body.first) + q.text(" ") + q.format(part.contents.body.first) + else + q.format(arguments) + end elsif part.is_a?(ArrayLiteral) q.text(" ") q.format(arguments) @@ -2091,6 +2096,17 @@ def format_arguments(q, opening, closing) q.breakable("") q.if_break { q.text(closing) } end + + def skip_parens?(node) + case node + in Int | FloatLiteral + true + in VarRef[value: GVar | IVar | CVar | Kw | Const] + true + else + false + end + end end # Break represents using the +break+ keyword. @@ -4664,6 +4680,11 @@ def format(q) return end + if contains_conditional? + format_break(q, force: true) + return + end + if node.consequent || node.statements.empty? q.group { format_break(q, force: true) } else @@ -4700,6 +4721,11 @@ def format_break(q, force:) q.breakable(force: force) q.text("end") end + + def contains_conditional? + node.statements.body.length == 1 && + [If, IfMod, IfOp, Unless, UnlessMod].include?(node.statements.body.first.class) + end end # If represents the first clause in an +if+ chain. diff --git a/test/fixtures/if.rb b/test/fixtures/if.rb index 4331abb1..ed5e5a30 100644 --- a/test/fixtures/if.rb +++ b/test/fixtures/if.rb @@ -28,3 +28,7 @@ if (foo += 1) foo end +% +if foo + a ? b : c +end diff --git a/test/fixtures/next.rb b/test/fixtures/next.rb index ad5bac36..61d31027 100644 --- a/test/fixtures/next.rb +++ b/test/fixtures/next.rb @@ -25,3 +25,31 @@ foo bar ) +% +next(1) +- +next 1 +% +next(1.0) +- +next 1.0 +% +next($a) +- +next $a +% +next(@@a) +- +next @@a +% +next(self) +- +next self +% +next(@a) +- +next @a +% +next(A) +- +next A diff --git a/test/fixtures/unless.rb b/test/fixtures/unless.rb index 95a40c38..c66b16bf 100644 --- a/test/fixtures/unless.rb +++ b/test/fixtures/unless.rb @@ -28,3 +28,7 @@ unless (foo += 1) foo end +% +unless foo + a ? b : c +end