// NOTE: This file is generated by the templates/template.rb script and should not // be modified manually. See /home/runner/work/herb/herb/templates/javascript/packages/core/src/visitor.ts.erb import { Node, ERBNode, DocumentNode, LiteralNode, HTMLOpenTagNode, HTMLConditionalOpenTagNode, HTMLCloseTagNode, HTMLOmittedCloseTagNode, HTMLVirtualCloseTagNode, HTMLElementNode, HTMLConditionalElementNode, HTMLAttributeValueNode, HTMLAttributeNameNode, HTMLAttributeNode, RubyLiteralNode, RubyHTMLAttributesSplatNode, ERBOpenTagNode, HTMLTextNode, HTMLCommentNode, HTMLDoctypeNode, XMLDeclarationNode, CDATANode, WhitespaceNode, ERBContentNode, ERBEndNode, ERBElseNode, ERBIfNode, ERBBlockNode, ERBWhenNode, ERBCaseNode, ERBCaseMatchNode, ERBWhileNode, ERBUntilNode, ERBForNode, ERBRescueNode, ERBEnsureNode, ERBBeginNode, ERBUnlessNode, RubyRenderLocalNode, RubyRenderKeywordsNode, ERBRenderNode, RubyParameterNode, ERBStrictLocalsNode, ERBYieldNode, ERBInNode, } from "./nodes.js" /** * Interface that enforces all node visit methods are implemented * This ensures that any class implementing IVisitor must have a visit method for every node type */ export interface IVisitor { visit(node: Node | null | undefined): void visitAll(nodes: (Node | null | undefined)[]): void visitChildNodes(node: Node): void visitDocumentNode(node: DocumentNode): void visitLiteralNode(node: LiteralNode): void visitHTMLOpenTagNode(node: HTMLOpenTagNode): void visitHTMLConditionalOpenTagNode(node: HTMLConditionalOpenTagNode): void visitHTMLCloseTagNode(node: HTMLCloseTagNode): void visitHTMLOmittedCloseTagNode(node: HTMLOmittedCloseTagNode): void visitHTMLVirtualCloseTagNode(node: HTMLVirtualCloseTagNode): void visitHTMLElementNode(node: HTMLElementNode): void visitHTMLConditionalElementNode(node: HTMLConditionalElementNode): void visitHTMLAttributeValueNode(node: HTMLAttributeValueNode): void visitHTMLAttributeNameNode(node: HTMLAttributeNameNode): void visitHTMLAttributeNode(node: HTMLAttributeNode): void visitRubyLiteralNode(node: RubyLiteralNode): void visitRubyHTMLAttributesSplatNode(node: RubyHTMLAttributesSplatNode): void visitERBOpenTagNode(node: ERBOpenTagNode): void visitHTMLTextNode(node: HTMLTextNode): void visitHTMLCommentNode(node: HTMLCommentNode): void visitHTMLDoctypeNode(node: HTMLDoctypeNode): void visitXMLDeclarationNode(node: XMLDeclarationNode): void visitCDATANode(node: CDATANode): void visitWhitespaceNode(node: WhitespaceNode): void visitERBContentNode(node: ERBContentNode): void visitERBEndNode(node: ERBEndNode): void visitERBElseNode(node: ERBElseNode): void visitERBIfNode(node: ERBIfNode): void visitERBBlockNode(node: ERBBlockNode): void visitERBWhenNode(node: ERBWhenNode): void visitERBCaseNode(node: ERBCaseNode): void visitERBCaseMatchNode(node: ERBCaseMatchNode): void visitERBWhileNode(node: ERBWhileNode): void visitERBUntilNode(node: ERBUntilNode): void visitERBForNode(node: ERBForNode): void visitERBRescueNode(node: ERBRescueNode): void visitERBEnsureNode(node: ERBEnsureNode): void visitERBBeginNode(node: ERBBeginNode): void visitERBUnlessNode(node: ERBUnlessNode): void visitRubyRenderLocalNode(node: RubyRenderLocalNode): void visitRubyRenderKeywordsNode(node: RubyRenderKeywordsNode): void visitERBRenderNode(node: ERBRenderNode): void visitRubyParameterNode(node: RubyParameterNode): void visitERBStrictLocalsNode(node: ERBStrictLocalsNode): void visitERBYieldNode(node: ERBYieldNode): void visitERBInNode(node: ERBInNode): void visitNode(node: Node): void visitERBNode(node: ERBNode): void } export class Visitor implements IVisitor { visit(node: Node | null | undefined): void { if (!node) return node.accept(this) } visitAll(nodes: (Node | null | undefined)[]): void { nodes.forEach(node => node?.accept(this)) } visitChildNodes(node: Node): void { node.compactChildNodes().forEach(node => node.accept(this)) } visitNode(_node: Node): void { // Default implementation does nothing } visitERBNode(_node: ERBNode): void { // Default implementation does nothing } visitDocumentNode(node: DocumentNode): void { this.visitNode(node) this.visitChildNodes(node) } visitLiteralNode(node: LiteralNode): void { this.visitNode(node) this.visitChildNodes(node) } visitHTMLOpenTagNode(node: HTMLOpenTagNode): void { this.visitNode(node) this.visitChildNodes(node) } visitHTMLConditionalOpenTagNode(node: HTMLConditionalOpenTagNode): void { this.visitNode(node) this.visitChildNodes(node) } visitHTMLCloseTagNode(node: HTMLCloseTagNode): void { this.visitNode(node) this.visitChildNodes(node) } visitHTMLOmittedCloseTagNode(node: HTMLOmittedCloseTagNode): void { this.visitNode(node) this.visitChildNodes(node) } visitHTMLVirtualCloseTagNode(node: HTMLVirtualCloseTagNode): void { this.visitNode(node) this.visitChildNodes(node) } visitHTMLElementNode(node: HTMLElementNode): void { this.visitNode(node) this.visitChildNodes(node) } visitHTMLConditionalElementNode(node: HTMLConditionalElementNode): void { this.visitNode(node) this.visitChildNodes(node) } visitHTMLAttributeValueNode(node: HTMLAttributeValueNode): void { this.visitNode(node) this.visitChildNodes(node) } visitHTMLAttributeNameNode(node: HTMLAttributeNameNode): void { this.visitNode(node) this.visitChildNodes(node) } visitHTMLAttributeNode(node: HTMLAttributeNode): void { this.visitNode(node) this.visitChildNodes(node) } visitRubyLiteralNode(node: RubyLiteralNode): void { this.visitNode(node) this.visitChildNodes(node) } visitRubyHTMLAttributesSplatNode(node: RubyHTMLAttributesSplatNode): void { this.visitNode(node) this.visitChildNodes(node) } visitERBOpenTagNode(node: ERBOpenTagNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitHTMLTextNode(node: HTMLTextNode): void { this.visitNode(node) this.visitChildNodes(node) } visitHTMLCommentNode(node: HTMLCommentNode): void { this.visitNode(node) this.visitChildNodes(node) } visitHTMLDoctypeNode(node: HTMLDoctypeNode): void { this.visitNode(node) this.visitChildNodes(node) } visitXMLDeclarationNode(node: XMLDeclarationNode): void { this.visitNode(node) this.visitChildNodes(node) } visitCDATANode(node: CDATANode): void { this.visitNode(node) this.visitChildNodes(node) } visitWhitespaceNode(node: WhitespaceNode): void { this.visitNode(node) this.visitChildNodes(node) } visitERBContentNode(node: ERBContentNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBEndNode(node: ERBEndNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBElseNode(node: ERBElseNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBIfNode(node: ERBIfNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBBlockNode(node: ERBBlockNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBWhenNode(node: ERBWhenNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBCaseNode(node: ERBCaseNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBCaseMatchNode(node: ERBCaseMatchNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBWhileNode(node: ERBWhileNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBUntilNode(node: ERBUntilNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBForNode(node: ERBForNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBRescueNode(node: ERBRescueNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBEnsureNode(node: ERBEnsureNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBBeginNode(node: ERBBeginNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBUnlessNode(node: ERBUnlessNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitRubyRenderLocalNode(node: RubyRenderLocalNode): void { this.visitNode(node) this.visitChildNodes(node) } visitRubyRenderKeywordsNode(node: RubyRenderKeywordsNode): void { this.visitNode(node) this.visitChildNodes(node) } visitERBRenderNode(node: ERBRenderNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitRubyParameterNode(node: RubyParameterNode): void { this.visitNode(node) this.visitChildNodes(node) } visitERBStrictLocalsNode(node: ERBStrictLocalsNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBYieldNode(node: ERBYieldNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } visitERBInNode(node: ERBInNode): void { this.visitNode(node) this.visitERBNode(node) this.visitChildNodes(node) } }