Skip to content

Commit 8b34e30

Browse files
committed
feat: add c++ ast helpers
1 parent ae8c382 commit 8b34e30

1 file changed

Lines changed: 27 additions & 0 deletions

File tree

src/cpp-ast.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import Parser from "tree-sitter";
2+
import type { SyntaxNode } from "tree-sitter";
3+
import Cpp from "tree-sitter-cpp";
4+
5+
const parser = new Parser();
6+
parser.setLanguage(Cpp as unknown as Parser.Language);
7+
8+
export function parseCpp(sourceText: string): SyntaxNode {
9+
return parser.parse(sourceText).rootNode;
10+
}
11+
12+
export function findFirstNamedNode(rootNode: SyntaxNode, type: string): SyntaxNode | undefined {
13+
if (rootNode.type === type) {
14+
return rootNode;
15+
}
16+
17+
return rootNode.namedChildren.find((child) => child.type === type) ?? undefined;
18+
}
19+
20+
export function walkNamed(node: SyntaxNode, visit: (node: SyntaxNode) => void): void {
21+
visit(node);
22+
node.namedChildren.forEach((child) => walkNamed(child, visit));
23+
}
24+
25+
export function childForField(node: SyntaxNode, fieldName: string): SyntaxNode | undefined {
26+
return node.childForFieldName(fieldName) ?? undefined;
27+
}

0 commit comments

Comments
 (0)