mod ast;
mod borrows;
mod calls;
mod dead_code;
mod discovery;
mod expands;
mod git_coupling;
mod lifetimes;
mod modules;
mod owns;
mod placeholder;
mod primitives;
mod references;
mod traits;
pub use ast::extract_ast;
pub use borrows::{resolve_borrows_edges, resolve_borrows_mut_edges};
pub use calls::build_call_graph;
pub use dead_code::detect_dead_code;
pub use discovery::discover_files;
pub use expands::resolve_expands_to_edges;
pub use git_coupling::analyze_git_coupling;
pub use modules::resolve_modules;
pub use owns::resolve_owns_edges;
pub use references::resolve_reference_edges;
pub use traits::{map_traits, resolve_impl_trait_edges};
use anyhow::Result;
use std::path::Path;
use crate::graph::Store;
#[derive(Clone, Debug, Default)]
pub struct PipelineConfig {
pub enable_trait_mapping: bool,
pub enable_git_coupling: bool,
}
pub fn run_pipeline(store: &Store, root: &Path, config: &PipelineConfig) -> Result<()> {
let files = discover_files(root)?;
for (path, content) in &files {
extract_ast(store, path, content, root)?;
}
primitives::create_primitive_nodes(store)?;
resolve_modules(store, root)?; build_call_graph(store)?;
resolve_impl_trait_edges(store)?; resolve_reference_edges(store)?; resolve_owns_edges(store)?; resolve_borrows_edges(store)?; resolve_borrows_mut_edges(store)?; resolve_expands_to_edges(store)?; if config.enable_trait_mapping {
map_traits(store, root)?;
}
detect_dead_code(store)?;
if config.enable_git_coupling {
analyze_git_coupling(store, root)?;
}
Ok(())
}