- Node.js 18+
- tree-sitter
- tree-sitter-cpp
import Parser from "tree-sitter";
import Cpp from "tree-sitter-cpp";
import fs from "node:fs";
const { Query } = Parser;
const parser = new Parser();
parser.setLanguage(Cpp);
const sourceCode = fs.readFileSync("/path/to/file.cpp", "utf8");
const tree = parser.parse(sourceCode);
// [Optional] Explore the tree in the play-ground https://tree-sitter.github.io/tree-sitter/playground
const lineNumber = 317;
const query = `(_) @node`;
const parserQuery = new Query(Cpp, query);
const matches = parserQuery
.matches(tree.rootNode)
.flatMap(({ captures }) => captures)
.map(({ node }) => node)
.filter((node) => node.startPosition.row === lineNumber));
console.log(matches.toString());