Skip to content
Merged
5 changes: 5 additions & 0 deletions .changeset/lazy-papers-report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@codemod-utils/ast-template": minor
---

Replaced ember-template-recast with @glimmer/syntax
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export function removeClassAttribute(file: string): string {
const traverse = AST.traverse();

const ast = traverse(file, {
// @ts-expect-error: Incorrect type
AttrNode(node) {
if (node.name !== 'class') {
return;
Expand Down
2 changes: 1 addition & 1 deletion packages/ast/template/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
"test": "sh build.sh --test && mt dist-for-testing --quiet"
},
"dependencies": {
"ember-template-recast": "^6.1.5"
"@glimmer/syntax": "^0.95.0"
},
"devDependencies": {
"@codemod-utils/tests": "workspace:*",
Expand Down
41 changes: 41 additions & 0 deletions packages/ast/template/src/-private/glimmer-syntax.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import {
type AST,
builders,
type NodeVisitor,
print as upstreamPrint,
traverse as upstreamTraverse,
} from '@glimmer/syntax';

import { type NodeInfo, Parser } from './glimmer-syntax/parser.js';

const NODE_INFO = new WeakMap<AST.Node, NodeInfo>();

export function parse(template: string): AST.Template {
return new Parser(template, NODE_INFO).ast;
}

export function print(ast: AST.Node): string {
return upstreamPrint(ast, {
entityEncoding: 'raw',
// @ts-expect-error: Incorrect type
override: (ast) => {
const info = NODE_INFO.get(ast);

if (info) {
return info.parse_result.print(ast);
}
},
});
}

export function traverse() {
return function (file: string, visitMethods: NodeVisitor = {}): AST.Template {
const { ast } = new Parser(file, NODE_INFO);

upstreamTraverse(ast, visitMethods);

return ast;
};
}

export { builders };
Loading
Loading