align indentation of multiline expressions and statements
This commit is contained in:
parent
8e29c1dde4
commit
6a7477870d
5 changed files with 58 additions and 8 deletions
|
@ -31,14 +31,35 @@ export const print: Printer<Node>["print"] = (path) => {
|
|||
};
|
||||
|
||||
const printExpression = (node: Expression): builders.Doc => {
|
||||
return builders.group(["{{", " ", node.content, " ", "}}"], {
|
||||
shouldBreak: node.ownLine || node.content.includes("\n"),
|
||||
});
|
||||
const multiline = node.content.includes("\n");
|
||||
|
||||
return builders.group(
|
||||
builders.join(" ", [
|
||||
"{{",
|
||||
multiline
|
||||
? builders.indent([getMultilineGroup(node.content)])
|
||||
: node.content,
|
||||
multiline ? [builders.hardline, "}}"] : "}}",
|
||||
]),
|
||||
{
|
||||
shouldBreak: node.ownLine,
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
const printStatement = (node: Statement): builders.Doc => {
|
||||
const multiline = node.content.includes("\n");
|
||||
|
||||
const statemnt = builders.group(
|
||||
["{%", node.delimiter, " ", node.content, " ", node.delimiter, "%}"],
|
||||
builders.join(" ", [
|
||||
["{%", node.delimiter],
|
||||
multiline
|
||||
? builders.indent(getMultilineGroup(node.content))
|
||||
: node.content,
|
||||
multiline
|
||||
? [builders.hardline, node.delimiter, "%}"]
|
||||
: [node.delimiter, "%}"],
|
||||
]),
|
||||
{ shouldBreak: node.ownLine }
|
||||
);
|
||||
|
||||
|
@ -147,6 +168,14 @@ export const embed: Printer<Node>["embed"] = (
|
|||
return [...mapped, builders.hardline];
|
||||
};
|
||||
|
||||
const getMultilineGroup = (content: String): builders.Group => {
|
||||
return builders.group(
|
||||
content.split("\n").map((line, i) => {
|
||||
return [builders.hardline, line.trim()];
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
const splitAtElse = (node: Node): string[] => {
|
||||
const elseNodes = Object.values(node.nodes).filter(
|
||||
(n) =>
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
<div>
|
||||
{{ {
|
||||
{{
|
||||
{
|
||||
'dict': 'of',
|
||||
'key': 'and',
|
||||
'value': 'pairs'
|
||||
} }}
|
||||
}
|
||||
}}
|
||||
</div>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
{
|
||||
'dict': 'of',
|
||||
'key': 'and',
|
||||
'value': 'pairs'
|
||||
'value': 'pairs'
|
||||
}
|
||||
}}
|
||||
</div>
|
10
test/cases/statement_long/expected.html
Normal file
10
test/cases/statement_long/expected.html
Normal file
|
@ -0,0 +1,10 @@
|
|||
<ul>
|
||||
{%
|
||||
for href, caption in [
|
||||
('index.html', 'Index'),
|
||||
('about.html', 'About'),
|
||||
('downloads.html', 'Downloads')]
|
||||
%}
|
||||
<li><a href="{{ href }}">{{ caption }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
9
test/cases/statement_long/input.html
Normal file
9
test/cases/statement_long/input.html
Normal file
|
@ -0,0 +1,9 @@
|
|||
<ul>
|
||||
{% for href, caption in [
|
||||
('index.html', 'Index'),
|
||||
('about.html', 'About'),
|
||||
('downloads.html', 'Downloads')]
|
||||
%}
|
||||
<li><a href="{{ href }}">{{ caption }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
Loading…
Reference in a new issue