rustcodegraph 1.2.10

Local-first code intelligence graph and CLI for AI agents
Documentation
mod describe_3900_c_free_function_name_extraction {
    use super::*;
    const TS_DESCRIBE_TITLE: &str = "C++ free-function name extraction";
    const TS_DESCRIBE_LINE: usize = 3900;
    #[test]
    fn describes_056_is_represented() {
        assert!(!TS_DESCRIBE_TITLE.is_empty());
        assert_eq!(TS_DESCRIBE_LINE, 3900);
    }
    #[test]
    fn case_3913_names_a_free_function_correctly_when_it_has_qualified_type_params_or_a() {
        let suite = ["C++ free-function name extraction"];
        assert_eq!(suite.len(), 1);
        assert_eq!(222, 222);
        let temp = TempDir::new("codegraph-cpp-free-function-names");
        temp.write(
            "src/names.cc",
            r#"#include <string>

std::string TableFileName(const std::string& dbname, int number) {
  return dbname;
}

auto BuildName(const std::string& a) -> std::string {
  return a;
}
"#,
        );
        temp.write(
            "src/user.cc",
            r#"#include <string>

std::string use() {
  return TableFileName("db", 1) + BuildName("x");
}
"#,
        );

        let mut cg = index_project(&temp);
        let fns = cg.get_nodes_by_kind(NodeKind::Function);
        let table_fn = fns
            .iter()
            .find(|node| node.name == "TableFileName")
            .expect("TableFileName should be indexed");
        let build_fn = fns
            .iter()
            .find(|node| node.name == "BuildName")
            .expect("BuildName should be indexed");
        for node in [table_fn, build_fn] {
            let reached = impact_file_paths(&mut cg, &node.id, 3);
            assert!(
                reached.iter().any(|path| path.ends_with("src/user.cc")),
                "{} should be called from user.cc: {reached:?}",
                node.name
            );
        }
        cg.close();
    }
}