From d33f99c83d6d2d3af76b0dc626eca9d22979629d Mon Sep 17 00:00:00 2001 From: Sam Vervaeck Date: Sun, 31 May 2020 20:49:18 +0200 Subject: [PATCH] treegen: Add some enhancements to generated code --- treegen/src/index.ts | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/treegen/src/index.ts b/treegen/src/index.ts index 9c29999be..6c2fcc3fc 100644 --- a/treegen/src/index.ts +++ b/treegen/src/index.ts @@ -50,14 +50,12 @@ export function generateAST(decls: Declaration[]) { jsFile.write(fs.readFileSync(path.join(PACKAGE_ROOT, 'snippets', 'ast-before.js'), 'utf8')); - //jsFile.write(`\nconst NODE_TYPES = {\n`); - //jsFile.indent(); for (const decl of finalNodes) { jsFile.write(`class ${decl.name} extends SyntaxBase {\n\n`); jsFile.indent(); - jsFile.write(`static kind = ${decl.index};\n\n`); + jsFile.write(`kind = ${decl.index};\n\n`); jsFile.write(`static parents = `); jsFile.write(JSON.stringify([...getParentChain(decl.name), 'Syntax'], undefined, 2)); jsFile.write(';\n\n') @@ -105,6 +103,14 @@ export function generateAST(decls: Declaration[]) { jsFile.dedent(2); jsFile.write(` }\n}\n\n`); + + + jsFile.write(`export const SyntaxKind = {\n`) + for (const leafNode of finalNodes) { + jsFile.write(` ${leafNode.name}: ${leafNode.index},\n`); + } + jsFile.write('}\n\n') + for (const decl of nodeDecls) { jsFile.write(`export function is${decl.name}(value) {\n`); jsFile.indent(); @@ -118,6 +124,14 @@ export function generateAST(decls: Declaration[]) { jsFile.write(`}\n`); } + for (const node of finalNodes) { + jsFile.write(`export function create${node.name}(...args) {\n`) + jsFile.indent() + jsFile.write(`return new ${node.name}(...args);\n`) + jsFile.dedent(); + jsFile.write('}\n\n') + } + jsFile.write(fs.readFileSync(path.join(PACKAGE_ROOT, 'snippets', 'ast-after.js'), 'utf8')); // Write corresponding TypeScript declarations