/
sheonn
/
ObjectScriptFormatter
Обзор
Документация
Войти
/
sheonn
/
ObjectScriptFormatter
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/visitor.ts
65 строк
2 KB
Sheonn
preliminary version
19 май 2026, 11:29
19 май 2026, 11:29
ae87253
Код
Авторство
О чём код?
import { Parser, Query, Language, Tree, Node } from 'web-tree-sitter'; // Базовый интерфейс посетителя interface ASTVisitor { visitClassStatement(node: Node): void; visitStatement(node: Node): void; visitBaseNode(node: Node): void; } interface ASTNode { accept(visitor: ASTVisitor): void; } export class EnhancedASTVisitor implements ASTVisitor { visitClassStatement(node: Node): void { console.log(`class_statement: ${node.text}`); } visitStatement(node: Node): void { console.log(`statement: ${node.text}`); } visitBaseNode(node: Node): void { for (let i = 0; i < node.childCount; i++) { const child = node.child(i); if (child) { new TreeNodeWrapper(child).accept(this); } } console.log(`default: ${node.text}`); } } // Создаем обертку вокруг Node для реализации паттерна export class TreeNodeWrapper implements ASTNode { constructor(private node: Node) {} accept(visitor: ASTVisitor): void { switch (this.node.type) { case 'class_statement': visitor.visitClassStatement(this.node); break; case 'statement': visitor.visitStatement(this.node); break; default: visitor.visitBaseNode(this.node); break; } // Обходим дочерние узлы /*for (let i = 0; i < this.node.childCount; i++) { const child = this.node.child(i); if (child) { new TreeNodeWrapper(child).accept(visitor); } }*/ } } /* Использование const wrapper = new TreeNodeWrapper(tree.rootNode); const enhancedVisitor = new EnhancedASTVisitor(); wrapper.accept(enhancedVisitor); */