[handlebars] group params in opening block statements (#14067)

Co-authored-by: fisker Cheung <lionkay@gmail.com>
This commit is contained in:
James C. Davisandfisker Cheung authored and GitHub committed 2023-01-28 09:23:40 +08:00
1 parent 310a5b1ba5
commit 37fb53acf3
9 files changed
+282 -50

No files matched your search

+57
View File
@@ -0,0 +1,57 @@
#### Group params in opening block statements (#14067 by @jamescdavis)
This is a follow-up to #13930 to establish wrapping consistency between opening block statements and else blocks by
grouping params in opening blocks. This causes params to break to a new line together and not be split across lines
unless the length of params exceeds the print width. This also updates the else block wrapping to behave exactly the
same as opening blocks.
<!-- prettier-ignore -->
```hbs
{{! Input }}
{{#block param param param param param param param param param param as |blockParam|}}
Hello
{{else block param param param param param param param param param param as |blockParam|}}
There
{{/block}}
{{! Prettier stable }}
{{#block
param
param
param
param
param
param
param
param
param
param
as |blockParam|
}}
Hello
{{else block param
param
param
param
param
param
param
param
param
param}}
There
{{/block}}
{{! Prettier main }}
{{#block
param param param param param param param param param param
as |blockParam|
}}
Hello
{{else block
param param param param param param param param param param
as |blockParam|
}}
There
{{/block}}
```
+22 -27
View File
@@ -30,6 +30,10 @@ const {
isWhitespaceNode,
} = require("./utils.js");
/**
* @typedef {import("../document").Doc} Doc
*/
const NEWLINES_TO_PRESERVE_MAX = 2;
// Formatter based on @glimmerjs/syntax's built-in test formatter:
@@ -529,27 +533,24 @@ function printInverseBlockClosingMustache(node) {
function printOpenBlock(path, print) {
const node = path.getValue();
/** @type {Doc[]} */
const parts = [];
const openingMustache = printOpeningBlockOpeningMustache(node);
const closingMustache = printOpeningBlockClosingMustache(node);
const attributes = [printPath(path, print)];
const params = printParams(path, print);
if (params) {
attributes.push(line, params);
const paramsDoc = printParams(path, print);
if (paramsDoc) {
parts.push(group(paramsDoc));
}
if (isNonEmptyArray(node.program.blockParams)) {
const block = printBlockParams(node.program);
attributes.push(line, block);
parts.push(printBlockParams(node.program));
}
return group([
openingMustache,
indent(attributes),
printOpeningBlockOpeningMustache(node),
printPath(path, print),
parts.length > 0 ? indent([line, join(line, parts)]) : "",
softline,
closingMustache,
printOpeningBlockClosingMustache(node),
]);
}
@@ -564,24 +565,18 @@ 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 group([
printInverseBlockOpeningMustache(parentNode),
indent(
group([
group(["else", line, ifLikeKeyword]),
line,
printParams(path, print),
])
),
indent(blockParams),
["else", " ", ifLikeKeyword],
indent([
line,
group(printParams(path, print)),
...(isNonEmptyArray(node.program.blockParams)
? [line, printBlockParams(node.program)]
: []),
]),
softline,
printInverseBlockClosingMustache(parentNode),
]);
@@ -17,6 +17,10 @@ printWidth: 80
Hello
{{/block}}
{{#block param param param param param param param param param param param hashKey=hashValue as |blockParam|}}
Hello
{{/block}}
{{#block param param param param param param param hashKey=HashValue hashKey=hashValue}}
Hello
{{/block}}
@@ -71,6 +75,17 @@ printWidth: 80
}}{{/block}}
{{#block
param param param param param param param hashKey=hashValue
as |blockParam|
}}
Hello
{{/block}}
{{#block
param
param
param
param
param
param
param
@@ -85,33 +100,13 @@ printWidth: 80
{{/block}}
{{#block
param
param
param
param
param
param
param
hashKey=HashValue
hashKey=hashValue
param param param param param param param hashKey=HashValue hashKey=hashValue
}}
Hello
{{/block}}
{{#block
param
param
param
param
param
param
param
param
param
param
param
param
param
param param param param param param param param param param param param param
}}
Hello
{{/block}}
@@ -294,6 +289,24 @@ printWidth: 80
{{f}}
{{/when}}
{{#when abcdefghijklmnopqrstuvwxy abcdefghijklmnopqrstuvwxy abcdefghijklmnopqrstuvwxy as |b|}}
{{b}}
{{else when abcdefghijklmnopqrstuvwxy abcdefghijklmnopqrstuvwxy abcdefghijklmnopqrstuvwxy as |d|}}
{{d}}
{{/when}}
{{#when abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz as |b|}}
{{b}}
{{else when abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz as |d|}}
{{d}}
{{/when}}
{{#abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrst param param param as |foo|}}
1
{{else abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrst param param param as |bar|}}
2
{{/abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrst}}
=====================================output=====================================
<h1>
{{#when isAtWork}}
@@ -419,7 +432,8 @@ printWidth: 80
as |b|
}}
{{b}}
{{else when abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnop
{{else when
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnop
as |d|
}}
{{d}}
@@ -429,6 +443,46 @@ printWidth: 80
}}
{{f}}
{{/when}}
{{#when
abcdefghijklmnopqrstuvwxy abcdefghijklmnopqrstuvwxy abcdefghijklmnopqrstuvwxy
as |b|
}}
{{b}}
{{else when
abcdefghijklmnopqrstuvwxy abcdefghijklmnopqrstuvwxy abcdefghijklmnopqrstuvwxy
as |d|
}}
{{d}}
{{/when}}
{{#when
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
as |b|
}}
{{b}}
{{else when
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
as |d|
}}
{{d}}
{{/when}}
{{#abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrst
param param param
as |foo|
}}
1
{{else abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrst
param param param
as |bar|
}}
2
{{/abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrst}}
================================================================================
`;
@@ -9,6 +9,10 @@
Hello
{{/block}}
{{#block param param param param param param param param param param param hashKey=hashValue as |blockParam|}}
Hello
{{/block}}
{{#block param param param param param param param hashKey=HashValue hashKey=hashValue}}
Hello
{{/block}}
@@ -126,3 +126,21 @@
{{else when abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz as |f|}}
{{f}}
{{/when}}
{{#when abcdefghijklmnopqrstuvwxy abcdefghijklmnopqrstuvwxy abcdefghijklmnopqrstuvwxy as |b|}}
{{b}}
{{else when abcdefghijklmnopqrstuvwxy abcdefghijklmnopqrstuvwxy abcdefghijklmnopqrstuvwxy as |d|}}
{{d}}
{{/when}}
{{#when abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz as |b|}}
{{b}}
{{else when abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz as |d|}}
{{d}}
{{/when}}
{{#abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrst param param param as |foo|}}
1
{{else abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrst param param param as |bar|}}
2
{{/abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrstuvwxyz-abcdefghijklmnopqrst}}
@@ -0,0 +1,81 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`custom-else.hbs - {"printWidth":5} format 1`] = `
====================================options=====================================
parsers: ["glimmer"]
printWidth: 5
| printWidth
=====================================input======================================
{{#when a}}
1
{{else when c}}
2
{{else}}
3
{{/when}}
{{#when a as |b|}}
{{b}}
{{else when c as |d|}}
{{d}}
{{else}}
3
{{/when}}
=====================================output=====================================
{{#when
a
}}
1
{{else when
c
}}
2
{{else}}
3
{{/when}}
{{#when
a
as |b|
}}
{{b}}
{{else when
c
as |d|
}}
{{d}}
{{else}}
3
{{/when}}
================================================================================
`;
exports[`if-else.hbs - {"printWidth":5} format 1`] = `
====================================options=====================================
parsers: ["glimmer"]
printWidth: 5
| printWidth
=====================================input======================================
{{#if a}}
1
{{else if b}}
2
{{else}}
3
{{/if}}
=====================================output=====================================
{{#if
a
}}
1
{{else if
b
}}
2
{{else}}
3
{{/if}}
================================================================================
`;
@@ -0,0 +1,15 @@
{{#when a}}
1
{{else when c}}
2
{{else}}
3
{{/when}}
{{#when a as |b|}}
{{b}}
{{else when c as |d|}}
{{d}}
{{else}}
3
{{/when}}
@@ -0,0 +1,7 @@
{{#if a}}
1
{{else if b}}
2
{{else}}
3
{{/if}}
@@ -0,0 +1 @@
run_spec(__dirname, ["glimmer"], { printWidth: 5 });