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..40f2054fe 100644 --- a/javascript/packages/formatter/test/erb/if.test.ts +++ b/javascript/packages/formatter/test/erb/if.test.ts @@ -254,5 +254,64 @@ 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) + }) + + 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) + }) }) })