weavatrix-rust 2.7.2

Protocol-independent Rust repository intelligence: typed evidence graphs for impact, architecture, APIs, Git, search, and memory
Documentation
#![cfg(feature = "lang-rust")]

mod language_fixture;

use language_fixture::Fixture;
use weavatrix_rust::{Analyzer, EdgeKind, NodeKind};

#[test]
fn resolves_rust_path_modules_as_local_imports() {
    let fixture = Fixture::new();
    fixture.write(
        "src/lib.rs",
        r#"
use local_alias::helper;

#[path = "actual_module.rs"]
mod local_alias;

pub fn run() {
    helper();
}
"#,
    );
    fixture.write("src/actual_module.rs", "pub fn helper() {}\n");

    let snapshot = Analyzer::default().analyze(&fixture.root).unwrap();
    let node = |kind: NodeKind, label: &str| {
        snapshot
            .nodes
            .iter()
            .find(|node| node.kind == kind && node.label == label)
            .unwrap()
    };
    let source = node(NodeKind::File, "src/lib.rs");
    let target = node(NodeKind::File, "src/actual_module.rs");
    let run = node(NodeKind::Function, "run");
    let helper = node(NodeKind::Function, "helper");
    let edge = |kind, source: &str, target: &str| {
        snapshot.edges.iter().any(|edge| {
            edge.kind == kind && edge.source.as_str() == source && edge.target.as_str() == target
        })
    };

    assert!(edge(
        EdgeKind::Imports,
        source.id.as_str(),
        target.id.as_str()
    ));
    assert!(edge(EdgeKind::Calls, run.id.as_str(), helper.id.as_str()));
    assert!(
        !snapshot
            .nodes
            .iter()
            .any(|node| node.kind == NodeKind::Package && node.label == "local_alias")
    );
}