use atomcode_core::semantic::SemanticSearcher;
use std::path::Path;
fn main() {
let mut s = SemanticSearcher::new();
println!("=== 场景1: 理解文件结构 ===");
println!("传统方式: read_file tool/mod.rs → 296行全文 → LLM 从中寻找函数");
println!("新方式: list_symbols → 只看签名\n");
let path = Path::new("crates/atomcode-core/src/tool/mod.rs");
if let Some(symbols) = s.list_symbols(path) {
println!("list_symbols 输出 ({} 个符号):", symbols.len());
for sym in &symbols {
println!(
" {:30} L{}-{:>4} ({})",
sym.name, sym.start_line, sym.end_line, sym.kind
);
}
}
println!("\n=== 场景2: 精准读取单个函数 ===");
println!("传统方式: read_file agent/mod.rs → 3000+行截断 → 再 read_file offset → 再补读");
println!("新方式: extract_symbol → 只拿目标函数\n");
let agent_path = Path::new("crates/atomcode-core/src/tool/bash.rs");
if let Some(slice) = s.extract_symbol(agent_path, "check_destructive_command") {
let lines = slice.text.lines().count();
println!(
"extract_symbol 输出: {} (L{}-{}, {} 行)",
slice.name, slice.start_line, slice.end_line, lines
);
println!("--- 函数体 ---");
println!("{}", slice.text);
println!("--- END ---");
}
println!("\n=== 场景3: Skeleton 骨架 ===");
println!("传统方式: read_file 大文件 → 2000行截断");
println!("新方式: skeleton → 只看签名骨架\n");
let big_path = Path::new("crates/atomcode-core/src/tool/bash.rs");
let full_lines = std::fs::read_to_string(big_path).unwrap().lines().count();
if let Some(skel) = s.skeleton(big_path) {
let skel_lines = skel.lines().count();
println!(
"原文件: {} 行 → Skeleton: {} 行 (压缩 {}x)",
full_lines,
skel_lines,
full_lines / skel_lines.max(1)
);
println!("{}", skel);
}
println!("\n=== 场景4: 大文件 agent/mod.rs ===");
let agent_path = Path::new("crates/atomcode-core/src/agent/mod.rs");
let full_lines = std::fs::read_to_string(agent_path).unwrap().lines().count();
if let Some(skel) = s.skeleton(agent_path) {
let skel_lines = skel.lines().count();
println!(
"原文件: {} 行 → Skeleton: {} 行 (压缩 {}x)",
full_lines,
skel_lines,
full_lines / skel_lines.max(1)
);
println!("{}", skel);
}
}