the_code_graph_cli/commands/
helpers.rs1use crate::adapters::fs::RealFileSystem;
2use crate::adapters::git::ShellGitProvider;
3use crate::adapters::parse::RayonParseProvider;
4use crate::project::find_project_root;
5use domain::error::{CodeGraphError, Result};
6use domain::model::Confidence;
7use std::path::PathBuf;
8use storage::SqliteStore;
9
10pub fn open_graph() -> Result<(SqliteStore, PathBuf)> {
11 let cwd = std::env::current_dir().map_err(|e| CodeGraphError::FileSystem {
12 path: ".".into(),
13 source: e,
14 })?;
15 let root = find_project_root(&cwd)?;
16 let db_path = root.join(".code-graph").join("graph.db");
17 if !db_path.exists() {
18 return Err(CodeGraphError::IndexNotBuilt);
19 }
20 let store = SqliteStore::open(&db_path).map_err(|e| CodeGraphError::Storage(format!("{e}")))?;
21
22 let data_dir = root.join(".code-graph");
24 let fs = RealFileSystem;
25 let git = ShellGitProvider::new(root.clone());
26 let parser = RayonParseProvider::new();
27 if let Err(e) = watch::freshness::ensure_fresh(&store, &parser, &fs, &git, &root, &data_dir) {
28 tracing::debug!("freshness check skipped: {e}");
29 }
30
31 Ok((store, root))
32}
33
34pub fn parse_confidence(s: &str) -> Result<Confidence> {
35 match s.to_ascii_lowercase().as_str() {
36 "high" => Ok(Confidence::High),
37 "medium" => Ok(Confidence::Medium),
38 "low" => Ok(Confidence::Low),
39 "all" => Ok(Confidence::Structural),
40 _ => Err(CodeGraphError::Other(format!(
41 "invalid confidence level: {s} (expected: high, medium, low, all)"
42 ))),
43 }
44}