mirror of
				https://github.com/Z3Prover/z3
				synced 2025-10-31 19:52:29 +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`);
 | |
| }
 | |
| 
 |