1mod crate_graph;
2mod ids;
3mod module_graph;
4
5use anyhow::{Context, Result};
6use cargo_metadata::MetadataCommand;
7use code_split_core::GraphBuilder;
8use std::path::Path;
9
10pub fn analyze(workspace: &Path, builder: &mut GraphBuilder) -> Result<()> {
11 analyze_with(workspace, builder, false)
12}
13
14pub fn analyze_local_only(workspace: &Path, builder: &mut GraphBuilder) -> Result<()> {
24 analyze_with(workspace, builder, true)
25}
26
27fn analyze_with(workspace: &Path, builder: &mut GraphBuilder, local_only: bool) -> Result<()> {
28 let manifest = workspace.join("Cargo.toml");
29 let mut cmd = MetadataCommand::new();
30 cmd.manifest_path(&manifest);
31 if local_only {
32 cmd.other_options(["--no-deps".to_string()]);
33 }
34 let metadata = cmd
35 .exec()
36 .with_context(|| format!("running cargo metadata for {}", manifest.display()))?;
37
38 crate_graph::contribute(&metadata, builder);
39 module_graph::contribute(&metadata, builder)?;
40 Ok(())
41}