UNPKG

@taml/ast

Version:

Abstract Syntax Tree types and utilities for TAML (Terminal ANSI Markup Language)

78 lines 2.68 kB
/** * Visitor pattern implementation for TAML AST */ import type { DocumentNode, ElementNode, TamlNode, TextNode } from "./nodes.js"; /** * Visitor interface for traversing and processing AST nodes */ export interface Visitor { /** Called when visiting a document node */ visitDocument?(node: DocumentNode): void; /** Called when visiting an element node */ visitElement?(node: ElementNode): void; /** Called when visiting a text node */ visitText?(node: TextNode): void; /** Called before visiting children (pre-order) */ enterNode?(node: TamlNode): void; /** Called after visiting children (post-order) */ exitNode?(node: TamlNode): void; } /** * Transformer interface for converting AST nodes to other types */ export interface Transformer<T = TamlNode> { /** Transform a document node */ visitDocument?(node: DocumentNode): T; /** Transform an element node */ visitElement?(node: ElementNode): T; /** Transform a text node */ visitText?(node: TextNode): T; } /** * Visit an AST node and its children using the visitor pattern */ export declare function visit(node: TamlNode, visitor: Visitor): void; /** * Transform an AST node using the transformer pattern */ export declare function transform<T>(node: TamlNode, transformer: Transformer<T>): T; /** * Visit nodes asynchronously */ export declare function visitAsync(node: TamlNode, visitor: AsyncVisitor): Promise<void>; /** * Async visitor interface */ export interface AsyncVisitor { /** Called when visiting a document node */ visitDocument?(node: DocumentNode): Promise<void>; /** Called when visiting an element node */ visitElement?(node: ElementNode): Promise<void>; /** Called when visiting a text node */ visitText?(node: TextNode): Promise<void>; /** Called before visiting children (pre-order) */ enterNode?(node: TamlNode): Promise<void>; /** Called after visiting children (post-order) */ exitNode?(node: TamlNode): Promise<void>; } /** * Create a visitor that only visits specific node types */ export declare function createTypedVisitor<T extends TamlNode>(nodeTest: (node: TamlNode) => node is T, callback: (node: T) => void): Visitor; /** * Create a visitor that collects nodes of a specific type */ export declare function createCollectorVisitor<T extends TamlNode>(nodeTest: (node: TamlNode) => node is T): Visitor & { nodes: T[]; }; /** * Create a visitor that counts nodes by type */ export declare function createCounterVisitor(): Visitor & { counts: { document: number; element: number; text: number; }; }; //# sourceMappingURL=visitor.d.ts.map