diff --git a/treegen/src/ast.ts b/treegen/src/ast.ts new file mode 100644 index 000000000..5ca183ac8 --- /dev/null +++ b/treegen/src/ast.ts @@ -0,0 +1,49 @@ + +export interface ReferenceTypeNode { + type: 'ReferenceTypeNode'; + name: string; + typeArgs: TypeNode[]; +} + +export interface UnionTypeNode { + type: 'UnionTypeNode'; + elements: TypeNode[]; +} + +export type TypeNode + = ReferenceTypeNode + | UnionTypeNode + +export interface NodeField { + name: string; + typeNode: TypeNode; +} + +export interface NodeDeclaration { + type: 'NodeDeclaration'; + name: string; + fields: NodeField[]; +} + +export interface EnumField { + name: string; + value: number | null; +} + +export interface EnumDeclaration { + type: 'EnumDeclaration'; + name: string; + fields: EnumField[]; +} + +export interface TypeDeclaration { + type: 'TypeDeclaration'; + name: string; + typeNode: TypeNode; +} + +export type Declaration + = NodeDeclaration + | TypeDeclaration + | EnumDeclaration +