diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index 6622236d8fe3..ac9339ff5b26 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -80,3 +80,37 @@ Examples: var x = (await foo.bar.blah)?.hi; } ``` + +- Handlebars: Fix {{else}}{{#if}} into {{else if}} merging ([#6080] by [@dcyriller]) + + + ``` + // Input + {{#if a}} + a + {{else}} + {{#if c}} + c + {{/if}} + e + {{/if}} + + // Output (Prettier stable) + {{#if a}} + a + {{else if c}} + c + e + {{/if}} + + // Output (Prettier master) + Code Sample + {{#if a}} + a + {{else}} + {{#if c}} + c + {{/if}} + e + {{/if}} + ``` diff --git a/src/language-handlebars/printer-glimmer.js b/src/language-handlebars/printer-glimmer.js index 9261d0a3fc14..c73186b51683 100644 --- a/src/language-handlebars/printer-glimmer.js +++ b/src/language-handlebars/printer-glimmer.js @@ -106,11 +106,12 @@ function print(path, options, print) { const isElseIf = pp && pp.inverse && + pp.inverse.body.length === 1 && pp.inverse.body[0] === n && pp.inverse.body[0].path.parts[0] === "if"; const hasElseIf = n.inverse && - n.inverse.body[0] && + n.inverse.body.length === 1 && n.inverse.body[0].type === "BlockStatement" && n.inverse.body[0].path.parts[0] === "if"; const indentElse = hasElseIf ? a => a : indent; diff --git a/tests/glimmer/__snapshots__/jsfmt.spec.js.snap b/tests/glimmer/__snapshots__/jsfmt.spec.js.snap index 4c7bfde8671a..70ed53e5bd9a 100644 --- a/tests/glimmer/__snapshots__/jsfmt.spec.js.snap +++ b/tests/glimmer/__snapshots__/jsfmt.spec.js.snap @@ -872,6 +872,22 @@ printWidth: 80 ac {{/if}} {{/if}} + +{{#if a}} + a +
b
+ c +{{else}} + {{#if c}} + a + b +
c
+ {{/if}} +
a
+ b + c +{{/if}} + =====================================output===================================== {{#if a}} b @@ -936,6 +952,26 @@ printWidth: 80 ac {{/if}} {{/if}} +{{#if a}} + a +
+ b +
+ c +{{else}} + {{#if c}} + a + b +
+ c +
+ {{/if}} +
+ a +
+ b + c +{{/if}} ================================================================================ `; @@ -1015,6 +1051,22 @@ singleQuote: true ac {{/if}} {{/if}} + +{{#if a}} + a +
b
+ c +{{else}} + {{#if c}} + a + b +
c
+ {{/if}} +
a
+ b + c +{{/if}} + =====================================output===================================== {{#if a}} b @@ -1079,6 +1131,26 @@ singleQuote: true ac {{/if}} {{/if}} +{{#if a}} + a +
+ b +
+ c +{{else}} + {{#if c}} + a + b +
+ c +
+ {{/if}} +
+ a +
+ b + c +{{/if}} ================================================================================ `; diff --git a/tests/glimmer/else-if.hbs b/tests/glimmer/else-if.hbs index 102767295e2b..94e1fdf809ca 100644 --- a/tests/glimmer/else-if.hbs +++ b/tests/glimmer/else-if.hbs @@ -66,4 +66,19 @@ {{else if c}} ac {{/if}} -{{/if}} \ No newline at end of file +{{/if}} + +{{#if a}} + a +
b
+ c +{{else}} + {{#if c}} + a + b +
c
+ {{/if}} +
a
+ b + c +{{/if}}