tree-sitter replaces ast-grep

This commit is contained in:
Dhanji R. Prasanna
2025-11-05 13:56:23 +11:00
parent 71e9e46f74
commit f25a3d5e06
12 changed files with 1003 additions and 876 deletions

View File

@@ -0,0 +1,58 @@
//! Inspect tree-sitter AST structure for Rust code
use tree_sitter::{Parser, Language};
fn print_tree(node: tree_sitter::Node, source: &str, indent: usize) {
let indent_str = " ".repeat(indent);
let node_text = &source[node.byte_range()];
let preview = if node_text.len() > 50 {
format!("{}...", &node_text[..50])
} else {
node_text.to_string()
};
println!(
"{}{} [{}:{}] '{}'",
indent_str,
node.kind(),
node.start_position().row + 1,
node.start_position().column + 1,
preview.replace('\n', "\\n")
);
let mut cursor = node.walk();
for child in node.children(&mut cursor) {
print_tree(child, source, indent + 1);
}
}
fn main() -> anyhow::Result<()> {
let source_code = r#"
pub async fn example_async() {
println!("Hello");
}
fn regular_function() {
println!("Regular");
}
pub async fn another_async(x: i32) -> Result<(), ()> {
Ok(())
}
"#;
println!("Source code:");
println!("{}", source_code);
println!("\n{}", "=".repeat(80));
println!("AST Structure:");
println!("{}\n", "=".repeat(80));
let mut parser = Parser::new();
let language: Language = tree_sitter_rust::language().into();
parser.set_language(&language)?;
let tree = parser.parse(source_code, None).unwrap();
print_tree(tree.root_node(), source_code, 0);
Ok(())
}