Skip to content

Commit d1cfc0b

Browse files
authored
perf: use getVisitorKeys (#381)
prevents some needless recursion into embed
1 parent 23f3dc4 commit d1cfc0b

File tree

2 files changed

+22
-4
lines changed

2 files changed

+22
-4
lines changed

src/embed.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,22 @@ const {
2424
utils: { removeLines },
2525
} = doc;
2626

27+
const leaveAlone = new Set([
28+
'Script',
29+
'Style',
30+
'Identifier',
31+
'MemberExpression',
32+
'CallExpression',
33+
'ArrowFunctionExpression',
34+
]);
35+
const dontTraverse = new Set(['start', 'end', 'type']);
36+
37+
export function getVisitorKeys(node: any, nonTraversableKeys: Set<string>): string[] {
38+
return Object.keys(node).filter((key) => {
39+
return !nonTraversableKeys.has(key) && !leaveAlone.has(node.type) && !dontTraverse.has(key);
40+
});
41+
}
42+
2743
// Embed works like this in Prettier v3:
2844
// - do depth first traversal of all node properties
2945
// - deepest property is calling embed first

src/index.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { SupportLanguage, Parser, Printer } from 'prettier';
22
import * as prettierPluginBabel from 'prettier/plugins/babel';
33
import { hasPragma, print } from './print';
44
import { ASTNode } from './print/nodes';
5-
import { embed } from './embed';
5+
import { embed, getVisitorKeys } from './embed';
66
import { snipScriptAndStyleTagContent } from './lib/snipTagContent';
77

88
const babelParser = prettierPluginBabel.parsers.babel;
@@ -62,16 +62,18 @@ export const parsers: Record<string, Parser> = {
6262
...babelParser,
6363
parse: (text: string, options: any) => {
6464
const ast = babelParser.parse(text, options);
65-
65+
6666
return { ...ast, program: ast.program.body[0].expression };
67-
}
68-
}
67+
},
68+
},
6969
};
7070

7171
export const printers: Record<string, Printer> = {
7272
'svelte-ast': {
7373
print,
7474
embed,
75+
// @ts-expect-error Prettier's type definitions are wrong
76+
getVisitorKeys,
7577
},
7678
};
7779

0 commit comments

Comments
 (0)