loregrep 0.6.0

Repository indexing library for AI coding assistants. Tree-sitter parsing, fast in-memory indexing, and tool APIs for LLM integration.
Documentation
//! Demo of LoreGrep's enhanced builder methods and convenience APIs
//!
//! This example shows the new enhanced builder methods introduced in Phase 3:
//! Enhanced User Experience, providing convenient preset configurations.

use loregrep::LoreGrep;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("๐Ÿงช LoreGrep Enhanced Builder Methods Demo");
    println!("{}", "=".repeat(50));

    // Demo 1: Performance-optimized configuration
    println!("\n1. Performance-Optimized Configuration:");
    let _performance_build = LoreGrep::builder()
        .with_rust_analyzer()
        .optimize_for_performance() // New: 512KB file limit, depth 8
        .exclude_common_build_dirs() // Enhanced: More exclusions
        .exclude_vendor_dirs() // New: Exclude vendor directories
        .build()?;
    println!("โœ… Performance-optimized build created");
    println!("   ๐Ÿ“ Max file size: 512KB, Max depth: 8");
    println!("   ๐Ÿšซ Excludes: build dirs, vendor dirs, binary files");

    // Demo 2: Comprehensive analysis configuration
    println!("\n2. Comprehensive Analysis Configuration:");
    let _comprehensive_build = LoreGrep::builder()
        .with_all_analyzers() // Enhanced: All available analyzers
        .comprehensive_analysis() // New: 5MB limit, depth 20, more file types
        .include_config_files() // New: Include config files
        .exclude_test_dirs() // New: Exclude test directories
        .build()?;
    println!("โœ… Comprehensive analysis build created");
    println!("   ๐Ÿ“ Max file size: 5MB, Max depth: 20");
    println!("   โœ… Includes: source files, configs, documentation");
    println!("   ๐Ÿšซ Excludes: test directories");

    // Demo 3: Custom combination of convenience methods
    println!("\n3. Custom Combination Build:");
    let _custom_build = LoreGrep::builder()
        .with_rust_analyzer()
        .with_python_analyzer()
        .exclude_common_build_dirs()
        .exclude_test_dirs()
        .exclude_vendor_dirs()
        .include_source_files()
        .include_config_files()
        .max_files(5000)
        .build()?;
    println!("โœ… Custom combination build created");
    println!("   ๐Ÿ”ง Custom limits with selective inclusions/exclusions");

    // Demo 4: Project-specific presets vs enhanced builder
    println!("\n4. Project Presets vs Enhanced Builder:");

    // Using preset (simple, one-line)
    let _rust_preset = LoreGrep::rust_project(".")?;
    println!("โœ… Rust preset: LoreGrep::rust_project(\".\")");

    // Using enhanced builder (more control)
    let _enhanced_rust = LoreGrep::builder()
        .with_rust_analyzer()
        .include_patterns(vec!["**/*.rs".to_string(), "**/*.toml".to_string()])
        .exclude_common_build_dirs()
        .exclude_test_dirs() // Additional: exclude tests
        .optimize_for_performance() // Additional: performance optimization
        .build()?;
    println!("โœ… Enhanced Rust build with additional optimizations");

    // Demo 5: Auto-discovery vs manual configuration comparison
    println!("\n5. Auto-Discovery vs Manual Configuration:");

    // Auto-discovery (zero configuration)
    let _auto_discovered = LoreGrep::auto_discover(".")?;
    println!("โœ… Auto-discovery: LoreGrep::auto_discover(\".\")");

    // Manual enhanced configuration
    let _manual_enhanced = LoreGrep::builder()
        .with_all_analyzers()
        .exclude_common_build_dirs()
        .exclude_test_dirs()
        .exclude_vendor_dirs()
        .include_source_files()
        .optimize_for_performance()
        .build()?;
    println!("โœ… Manual enhanced configuration with all convenience methods");

    println!("\n๐ŸŽ‰ Enhanced Builder Demo Complete!");
    println!("๐Ÿ’ก Key benefits:");
    println!("   ๐Ÿš€ Performance presets for speed-critical applications");
    println!("   ๐Ÿ” Comprehensive presets for thorough analysis");
    println!("   ๐ŸŽ›๏ธ  Granular control with convenience methods");
    println!("   ๐ŸŽฏ One-line presets for common project types");
    println!("   ๐Ÿค– Zero-config auto-discovery for quick setup");

    Ok(())
}