Skip to content

Commit 275b93b

Browse files
committed
feat: implement printer for props statement
1 parent 4cd8467 commit 275b93b

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

src/print/PropItem.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { doc } from "prettier";
2+
import { EXPRESSION_NEEDED, STRING_NEEDS_QUOTES } from "../util/index.js";
3+
4+
const { group, indent, join, line } = doc.builders;
5+
6+
const printPropItem = (node, path, print) => {
7+
node[EXPRESSION_NEEDED] = false;
8+
node[STRING_NEEDS_QUOTES] = true;
9+
10+
const docs = [path.call(print, "name")];
11+
if (node.value !== undefined) {
12+
docs.push([" = ", path.call(print, "value")]);
13+
}
14+
15+
return group(docs);
16+
};
17+
18+
export { printPropItem };

src/print/PropsStatement.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { doc } from "prettier";
2+
3+
const { group, indent, join, line, indentIfBreak, ifBreak, softline } =
4+
doc.builders;
5+
6+
const printPropsStatement = (node, path, print) => {
7+
const itemsGroupId = Symbol("prop-items");
8+
9+
const mappedItems = path.map(print, "items");
10+
const joinedItems = join([",", line], mappedItems);
11+
12+
return group(
13+
[
14+
node.trimLeft ? "{%-" : "{%",
15+
" props ",
16+
indentIfBreak([softline, joinedItems], { groupId: itemsGroupId }),
17+
line,
18+
node.trimRight ? "-%}" : "%}"
19+
],
20+
{ id: itemsGroupId }
21+
);
22+
};
23+
24+
export { printPropsStatement };

src/printer.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ import { printIfStatement } from "./print/IfStatement.js";
2929
import { printMountStatement } from "./print/MountStatement.js";
3030
import { printForStatement } from "./print/ForStatement.js";
3131
import { printSetStatement } from "./print/SetStatement.js";
32+
import { printPropsStatement } from "./print/PropsStatement.js";
33+
import { printPropItem } from "./print/PropItem.js";
3234
import { printDoStatement } from "./print/DoStatement.js";
3335
import { printExtendsStatement } from "./print/ExtendsStatement.js";
3436
import { printEmbedStatement } from "./print/EmbedStatement.js";
@@ -221,6 +223,8 @@ printFunctions["MountStatement"] = printMountStatement;
221223
printFunctions["ForStatement"] = printForStatement;
222224
printFunctions["BinaryConcatExpression"] = printBinaryExpression;
223225
printFunctions["SetStatement"] = printSetStatement;
226+
printFunctions["PropsStatement"] = printPropsStatement;
227+
printFunctions["PropItem"] = printPropItem;
224228
printFunctions["VariableDeclarationStatement"] =
225229
printVariableDeclarationStatement;
226230
printFunctions["DoStatement"] = printDoStatement;

0 commit comments

Comments
 (0)