mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 05:19:11 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			36 lines
		
	
	
	
		
			984 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
	
		
			984 B
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
script({
 | 
						|
    title: "Extract functions from files using treesitter",
 | 
						|
    files: "src/muz/spacer/spacer_qe_project.cpp"
 | 
						|
})
 | 
						|
 | 
						|
function get_functions(captures : QueryCapture[], code : string) {
 | 
						|
    return captures.map(({ name, node }) => ({
 | 
						|
        code : node.text
 | 
						|
    }))
 | 
						|
}
 | 
						|
 | 
						|
const inputFile = env.files[0];
 | 
						|
 | 
						|
 | 
						|
const { captures: functions } = await parsers.code(
 | 
						|
    inputFile,
 | 
						|
    `(function_definition) @function`
 | 
						|
);
 | 
						|
 | 
						|
 | 
						|
let funs = get_functions(functions, inputFile.content);
 | 
						|
 | 
						|
for (const fun of funs) {
 | 
						|
    // todo put files in a different directory
 | 
						|
    let name = fun.code.split('(')[0].trim();
 | 
						|
    name = name
 | 
						|
        .replace(/::/g, '_')
 | 
						|
        .replace(/ /g, '_')
 | 
						|
        .replace(/\*/g, '');
 | 
						|
    console.log(name);        
 | 
						|
    let outputFile = "slice_" + path.basename(inputFile.filename) + name + ".cpp";
 | 
						|
    outputFile = path.join("code_slices", outputFile);
 | 
						|
        
 | 
						|
    await workspace.writeText(outputFile, `//Extracted ${name} in ${inputFile.filename}\n${fun.code}\n\n`);
 | 
						|
}
 | 
						|
 |