syncable_cli/handlers/
analyze.rs1use crate::{
2 analyzer::analyze_monorepo,
3 analyzer::display::{
4 ColorScheme as DisplayColorScheme, DisplayMode, display_analysis_with_return,
5 init_color_adapter,
6 },
7 cli::{ColorScheme, DisplayFormat},
8};
9
10pub fn handle_analyze(
11 path: std::path::PathBuf,
12 json: bool,
13 detailed: bool,
14 display: Option<DisplayFormat>,
15 _only: Option<Vec<String>>,
16 color_scheme: Option<ColorScheme>,
17) -> crate::Result<String> {
18 if let Some(scheme) = color_scheme {
20 let display_scheme = match scheme {
21 ColorScheme::Auto => {
22 DisplayColorScheme::Dark }
25 ColorScheme::Dark => DisplayColorScheme::Dark,
26 ColorScheme::Light => DisplayColorScheme::Light,
27 };
28
29 if !matches!(scheme, ColorScheme::Auto) {
31 init_color_adapter(display_scheme);
32 }
33 }
34
35 println!("🔍 Analyzing project: {}", path.display());
36
37 let monorepo_analysis = analyze_monorepo(&path)?;
38
39 let output = if json {
40 println!("🔍 Analyzing JSON OUTPUT: {}", path.display());
41
42 display_analysis_with_return(&monorepo_analysis, DisplayMode::Json)
43 } else {
44 let mode = if detailed {
46 DisplayMode::Detailed
48 } else {
49 match display {
50 Some(DisplayFormat::Matrix) | None => DisplayMode::Matrix,
51 Some(DisplayFormat::Detailed) => DisplayMode::Detailed,
52 Some(DisplayFormat::Summary) => DisplayMode::Summary,
53 }
54 };
55
56 display_analysis_with_return(&monorepo_analysis, mode)
57 };
58
59 Ok(output)
60}