use opengrep::{Config, SearchEngine};
use std::path::PathBuf;
use tokio;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
opengrep::init_logging(1)?;
let mut config = Config::default();
config.search.threads = 4;
config.output.show_ast_context = true;
config.output.before_context = 1;
config.output.after_context = 1;
let engine = SearchEngine::new(config);
println!("Searching for 'fn' patterns...");
let results = engine.search("fn", &[PathBuf::from(".")]).await?;
println!("\nSearch Results:");
println!("==================");
println!("Files with matches: {}", results.len());
let total_matches: usize = results.iter().map(|r| r.matches.len()).sum();
println!("Total matches: {}", total_matches);
for (i, result) in results.iter().take(3).enumerate() {
println!("\n{}. {} ({} matches)",
i + 1,
result.path.display(),
result.matches.len());
if let Some(first_match) = result.matches.first() {
println!(" Line {}: {}",
first_match.line_number,
first_match.line_text.trim());
}
}
if results.len() > 3 {
println!("\n... and {} more files", results.len() - 3);
}
println!("\nSearch completed successfully!");
Ok(())
}