sparrow-cli 0.5.1

A local-first Rust agent cockpit — route, run, replay, rewind
Documentation
#![cfg(feature = "treesitter")]

use sparrow::memory::symbol_index::{SymbolIndex, SymbolKind};

fn temp_ws(name: &str) -> std::path::PathBuf {
    let id = std::time::SystemTime::now()
        .duration_since(std::time::UNIX_EPOCH)
        .unwrap()
        .as_nanos();
    let d = std::env::temp_dir().join(format!("sparrow-{name}-{id}"));
    std::fs::create_dir_all(d.join("src")).unwrap();
    d
}

#[test]
fn tree_sitter_symbol_index_finds_rust_definitions() {
    let ws = temp_ws("symbol-index");
    let source = r#"pub fn foo() -> u8 {
    1
}

pub struct Bar {
    value: u8,
}
"#;
    std::fs::write(ws.join("src").join("lib.rs"), source).unwrap();

    let index = SymbolIndex::build(&ws);
    let foo = index.find_definition("foo");
    assert_eq!(foo.len(), 1, "expected one foo definition, got {foo:?}");
    assert_eq!(foo[0].file, std::path::PathBuf::from("src").join("lib.rs"));
    assert_eq!(foo[0].line, 1);
    assert_eq!(foo[0].kind, SymbolKind::Fn);

    let bar = index.find_definition("Bar");
    assert_eq!(bar.len(), 1, "expected one Bar definition, got {bar:?}");
    assert_eq!(bar[0].file, std::path::PathBuf::from("src").join("lib.rs"));
    assert_eq!(bar[0].line, 5);
    assert_eq!(bar[0].kind, SymbolKind::Struct);

    let _ = std::fs::remove_dir_all(&ws);
}