treegen: Add some enhancements to generated code
This commit is contained in:
parent
518631f3b8
commit
d33f99c83d
1 changed files with 17 additions and 3 deletions
|
@ -50,14 +50,12 @@ export function generateAST(decls: Declaration[]) {
|
||||||
|
|
||||||
jsFile.write(fs.readFileSync(path.join(PACKAGE_ROOT, 'snippets', 'ast-before.js'), 'utf8'));
|
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) {
|
for (const decl of finalNodes) {
|
||||||
|
|
||||||
jsFile.write(`class ${decl.name} extends SyntaxBase {\n\n`);
|
jsFile.write(`class ${decl.name} extends SyntaxBase {\n\n`);
|
||||||
jsFile.indent();
|
jsFile.indent();
|
||||||
|
|
||||||
jsFile.write(`static kind = ${decl.index};\n\n`);
|
jsFile.write(`kind = ${decl.index};\n\n`);
|
||||||
jsFile.write(`static parents = `);
|
jsFile.write(`static parents = `);
|
||||||
jsFile.write(JSON.stringify([...getParentChain(decl.name), 'Syntax'], undefined, 2));
|
jsFile.write(JSON.stringify([...getParentChain(decl.name), 'Syntax'], undefined, 2));
|
||||||
jsFile.write(';\n\n')
|
jsFile.write(';\n\n')
|
||||||
|
@ -105,6 +103,14 @@ export function generateAST(decls: Declaration[]) {
|
||||||
jsFile.dedent(2);
|
jsFile.dedent(2);
|
||||||
jsFile.write(` }\n}\n\n`);
|
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) {
|
for (const decl of nodeDecls) {
|
||||||
jsFile.write(`export function is${decl.name}(value) {\n`);
|
jsFile.write(`export function is${decl.name}(value) {\n`);
|
||||||
jsFile.indent();
|
jsFile.indent();
|
||||||
|
@ -118,6 +124,14 @@ export function generateAST(decls: Declaration[]) {
|
||||||
jsFile.write(`}\n`);
|
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'));
|
jsFile.write(fs.readFileSync(path.join(PACKAGE_ROOT, 'snippets', 'ast-after.js'), 'utf8'));
|
||||||
|
|
||||||
// Write corresponding TypeScript declarations
|
// Write corresponding TypeScript declarations
|
||||||
|
|
Loading…
Reference in a new issue