Skip to content

Commit 45f3ea3

Browse files
add treesitter functionality
Signed-off-by: Nikolaj Bjorner <[email protected]>
1 parent bedc95c commit 45f3ea3

File tree

1 file changed

+28
-3
lines changed

1 file changed

+28
-3
lines changed

genaisrc/treesitter.genai.mts

+28-3
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,37 @@ script({
33
files: "src/muz/spacer/spacer_qe_project.cpp"
44
})
55

6+
// return function names and source code of the functions
67

8+
function get_functions(captures : QueryCapture[], code : string) {
9+
return captures.map(({ name, node }) => ({
10+
code : node.text
11+
}))
12+
}
713

814
const inputFile = env.files[0];
9-
const { captures } = await parsers.code(inputFile);
1015

11-
// pretty-print tree sitter parse tree of captures:
1216

17+
const { captures: functions } = await parsers.code(
18+
inputFile,
19+
`(function_definition) @function`
20+
);
21+
22+
23+
let funs = get_functions(functions, inputFile.content);
24+
25+
for (const fun of funs) {
26+
// todo put files in a different directory
27+
let name = fun.code.split('(')[0].trim();
28+
name = name
29+
.replace(/::/g, '_')
30+
.replace(/ /g, '_');
31+
let outputFile = path.basename(inputFile.filename)
32+
.replace(/\.cpp$/, `.${name}.cpp`)
33+
.replace(/\.h$/, `.${name}.h`);
34+
outputFile = "slice_" + outputFile;
35+
outputFile = path.join("code_slices", outputFile);
36+
37+
await workspace.writeText(outputFile, `//Extracted ${name} in ${inputFile.filename}\n${fun.code}\n\n`);
38+
}
1339

14-
console.log(JSON.stringify(captures, null,2))

0 commit comments

Comments
 (0)