From 29c4e10135077946e9b0960ceacfbb6cc48ca10c Mon Sep 17 00:00:00 2001 From: Marco Roth Date: Sat, 8 Nov 2025 06:05:27 +0100 Subject: [PATCH 1/2] Formatter: Fix formatting `<% else %>` in inline mode --- .../packages/formatter/src/format-printer.ts | 11 ++++++++--- .../packages/formatter/test/erb/if.test.ts | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/javascript/packages/formatter/src/format-printer.ts b/javascript/packages/formatter/src/format-printer.ts index 7c20838bc..08a4b1bee 100644 --- a/javascript/packages/formatter/src/format-printer.ts +++ b/javascript/packages/formatter/src/format-printer.ts @@ -1245,7 +1245,7 @@ export class FormatPrinter extends Printer { this.lines.push(" ") } - if (node.subsequent) this.visit(node.end_node) + if (node.subsequent) this.visit(node.subsequent) if (node.end_node) this.visit(node.end_node) } else { this.printERBNode(node) @@ -1260,8 +1260,13 @@ export class FormatPrinter extends Printer { } visitERBElseNode(node: ERBElseNode) { - this.printERBNode(node) - this.withIndent(() => node.statements.forEach(statement => this.visit(statement))) + if (this.inlineMode) { + this.printERBNode(node) + node.statements.forEach(statement => this.visit(statement)) + } else { + this.printERBNode(node) + this.withIndent(() => node.statements.forEach(statement => this.visit(statement))) + } } visitERBWhenNode(node: ERBWhenNode) { diff --git a/javascript/packages/formatter/test/erb/if.test.ts b/javascript/packages/formatter/test/erb/if.test.ts index 6be5b062a..54d005108 100644 --- a/javascript/packages/formatter/test/erb/if.test.ts +++ b/javascript/packages/formatter/test/erb/if.test.ts @@ -254,5 +254,24 @@ describe("@herb-tools/formatter", () => { const output = formatter.format(input) expect(output).toEqual(expected) }) + + test("if inside ", () => { + const input = dedent` + + <% if valid? %> + Valid + <% else %> + Invalid + <% end %> + + ` + + const expected = dedent` + <% if valid? %>Valid<% else %>Invalid<% end %> + ` + + const output = formatter.format(input) + expect(output).toEqual(expected) + }) }) }) From c1260a84e6c3f328772c1b577717ed1440c9bd25 Mon Sep 17 00:00:00 2001 From: Marco Roth Date: Sat, 8 Nov 2025 06:10:59 +0100 Subject: [PATCH 2/2] Add more tests --- .../packages/formatter/test/erb/if.test.ts | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/javascript/packages/formatter/test/erb/if.test.ts b/javascript/packages/formatter/test/erb/if.test.ts index 54d005108..40f2054fe 100644 --- a/javascript/packages/formatter/test/erb/if.test.ts +++ b/javascript/packages/formatter/test/erb/if.test.ts @@ -273,5 +273,45 @@ describe("@herb-tools/formatter", () => { const output = formatter.format(input) expect(output).toEqual(expected) }) + + test("if/elseif inside ", () => { + const input = dedent` + + <% if valid? %> + Valid + <% elsif invalid? %> + Invalid + <% end %> + + ` + + const expected = dedent` + <% if valid? %>Valid<% elsif invalid? %>Invalid<% end %> + ` + + const output = formatter.format(input) + expect(output).toEqual(expected) + }) + + test("if/elseif/else inside ", () => { + const input = dedent` + + <% if valid? %> + Valid + <% elsif invalid? %> + Invalid + <% else %> + Unknown + <% end %> + + ` + + const expected = dedent` + <% if valid? %>Valid<% elsif invalid? %>Invalid<% else %>Unknown<% end %> + ` + + const output = formatter.format(input) + expect(output).toEqual(expected) + }) }) })