diff --git a/changelog_unreleased/handlebars/13930.md b/changelog_unreleased/handlebars/13930.md new file mode 100644 index 000000000000..6e824a32e02c --- /dev/null +++ b/changelog_unreleased/handlebars/13930.md @@ -0,0 +1,42 @@ +#### Allow custom "else if"-like blocks with block params (#13930 by @jamescdavis) + +#13507 added support for custom block keywords used with `else`, but failed to allow block params. This updates printer-glimmer to allow block params with custom "else if"-like blocks. + + +```hbs +{{! Input }} +{#when isAtWork as |work|}} + Ship that + {{work}}! +{{else when isReading as |book|}} + You can finish + {{book}} + eventually... +{{else}} + Go to bed! +{{/when}} + +{{! Prettier stable }} +{{#when isAtWork as |work|}} + Ship that + {{work}}! +{{else when isReading}} + You can finish + {{book}} + eventually... +{{else}} + Go to bed! +{{/when}} + +{{! Prettier main }} +{#when isAtWork as |work|}} + Ship that + {{work}}! +{{else when isReading as |book|}} + You can finish + {{book}} + eventually... +{{else}} + Go to bed! +{{/when}} +``` diff --git a/src/language-handlebars/printer-glimmer.js b/src/language-handlebars/printer-glimmer.js index a73e58b9590b..9c388b51f0af 100644 --- a/src/language-handlebars/printer-glimmer.js +++ b/src/language-handlebars/printer-glimmer.js @@ -564,16 +564,28 @@ function printElseBlock(node, options) { } function printElseIfLikeBlock(path, print, ifLikeKeyword) { + const node = path.getValue(); + let blockParams = []; + + if (isNonEmptyArray(node.program.blockParams)) { + blockParams = [line, printBlockParams(node.program)]; + } + const parentNode = path.getParentNode(1); - return [ + return group([ printInverseBlockOpeningMustache(parentNode), - "else ", - ifLikeKeyword, - " ", - printParams(path, print), + indent( + group([ + group(["else", line, ifLikeKeyword]), + line, + printParams(path, print), + ]) + ), + indent(blockParams), + softline, printInverseBlockClosingMustache(parentNode), - ]; + ]); } function printCloseBlock(path, print, options) { diff --git a/tests/format/handlebars/block-statement/__snapshots__/jsfmt.spec.js.snap b/tests/format/handlebars/block-statement/__snapshots__/jsfmt.spec.js.snap index c9e5f615504f..8894daaed253 100644 --- a/tests/format/handlebars/block-statement/__snapshots__/jsfmt.spec.js.snap +++ b/tests/format/handlebars/block-statement/__snapshots__/jsfmt.spec.js.snap @@ -274,6 +274,26 @@ printWidth: 80 Another thing {{~/when~}} +{{#when a as |b|}} + {{b}} +{{else when c as |d|}} + {{d}} +{{else when e as |f|}} + {{f}} +{{else when g as |h|}} + {{h}} +{{else}} + j +{{/when}} + +{{#when abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst as |b|}} + {{b}} +{{else when abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnop as |d|}} + {{d}} +{{else when abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz as |f|}} + {{f}} +{{/when}} + =====================================output=====================================

{{#when isAtWork}} @@ -381,6 +401,34 @@ printWidth: 80 {{~else when anotherCondition~}} Another thing {{~/when~}} + +{{#when a as |b|}} + {{b}} +{{else when c as |d|}} + {{d}} +{{else when e as |f|}} + {{f}} +{{else when g as |h|}} + {{h}} +{{else}} + j +{{/when}} + +{{#when + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst + as |b| +}} + {{b}} +{{else when abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnop + as |d| +}} + {{d}} +{{else when + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + as |f| +}} + {{f}} +{{/when}} ================================================================================ `; diff --git a/tests/format/handlebars/block-statement/custom-else.hbs b/tests/format/handlebars/block-statement/custom-else.hbs index 156d61268cb0..72580285e949 100644 --- a/tests/format/handlebars/block-statement/custom-else.hbs +++ b/tests/format/handlebars/block-statement/custom-else.hbs @@ -106,3 +106,23 @@ {{~else when anotherCondition~}} Another thing {{~/when~}} + +{{#when a as |b|}} + {{b}} +{{else when c as |d|}} + {{d}} +{{else when e as |f|}} + {{f}} +{{else when g as |h|}} + {{h}} +{{else}} + j +{{/when}} + +{{#when abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst as |b|}} + {{b}} +{{else when abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnop as |d|}} + {{d}} +{{else when abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz as |f|}} + {{f}} +{{/when}}