syncable_cli/analyzer/display/
mod.rs

1//! # Display Module
2//!
3//! Provides improved CLI output formatting with matrix/dashboard views for better readability
4//! and easier parsing by both humans and LLMs.
5
6// Sub-modules
7mod box_drawer;
8mod color_adapter;
9mod detailed_view;
10mod helpers;
11mod json_view;
12mod matrix_view;
13mod summary_view;
14mod utils;
15
16// Re-export public items
17pub use box_drawer::BoxDrawer;
18pub use color_adapter::{ColorAdapter, ColorScheme, get_color_adapter, init_color_adapter};
19pub use helpers::{format_project_category, get_category_emoji};
20pub use utils::{
21    format_list_smart, format_ports_smart, get_terminal_width, smart_truncate, strip_ansi_codes,
22    truncate_to_width, visual_width,
23};
24
25use crate::analyzer::MonorepoAnalysis;
26
27/// Display mode for analysis output
28#[derive(Debug, Clone, Copy, PartialEq)]
29pub enum DisplayMode {
30    /// Compact matrix view (default)
31    Matrix,
32    /// Detailed vertical view (legacy)
33    Detailed,
34    /// Summary only
35    Summary,
36    /// JSON output
37    Json,
38}
39
40/// Main display function that routes to appropriate formatter
41pub fn display_analysis(analysis: &MonorepoAnalysis, mode: DisplayMode) {
42    match mode {
43        DisplayMode::Matrix => matrix_view::display_matrix_view(analysis),
44        DisplayMode::Detailed => detailed_view::display_detailed_view(analysis),
45        DisplayMode::Summary => summary_view::display_summary_view(analysis),
46        DisplayMode::Json => json_view::display_json_view(analysis),
47    }
48}
49
50/// Main display function that returns a string instead of printing
51pub fn display_analysis_to_string(analysis: &MonorepoAnalysis, mode: DisplayMode) -> String {
52    match mode {
53        DisplayMode::Matrix => matrix_view::display_matrix_view_to_string(analysis),
54        DisplayMode::Detailed => detailed_view::display_detailed_view_to_string(analysis),
55        DisplayMode::Summary => summary_view::display_summary_view_to_string(analysis),
56        DisplayMode::Json => json_view::display_json_view_to_string(analysis),
57    }
58}
59
60/// Combined function that both prints and returns a string
61pub fn display_analysis_with_return(analysis: &MonorepoAnalysis, mode: DisplayMode) -> String {
62    let output = display_analysis_to_string(analysis, mode);
63    print!("{}", output);
64    output
65}
66
67#[cfg(test)]
68mod tests {
69    use super::*;
70
71    #[test]
72    fn test_display_modes() {
73        // Test that display modes are properly defined
74        assert_eq!(DisplayMode::Matrix, DisplayMode::Matrix);
75        assert_ne!(DisplayMode::Matrix, DisplayMode::Detailed);
76    }
77}