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::{strip_ansi_codes, truncate_to_width, visual_width};
21
22use crate::analyzer::MonorepoAnalysis;
23
24/// Display mode for analysis output
25#[derive(Debug, Clone, Copy, PartialEq)]
26pub enum DisplayMode {
27    /// Compact matrix view (default)
28    Matrix,
29    /// Detailed vertical view (legacy)
30    Detailed,
31    /// Summary only
32    Summary,
33    /// JSON output
34    Json,
35}
36
37/// Main display function that routes to appropriate formatter
38pub fn display_analysis(analysis: &MonorepoAnalysis, mode: DisplayMode) {
39    match mode {
40        DisplayMode::Matrix => matrix_view::display_matrix_view(analysis),
41        DisplayMode::Detailed => detailed_view::display_detailed_view(analysis),
42        DisplayMode::Summary => summary_view::display_summary_view(analysis),
43        DisplayMode::Json => json_view::display_json_view(analysis),
44    }
45}
46
47/// Main display function that returns a string instead of printing
48pub fn display_analysis_to_string(analysis: &MonorepoAnalysis, mode: DisplayMode) -> String {
49    match mode {
50        DisplayMode::Matrix => matrix_view::display_matrix_view_to_string(analysis),
51        DisplayMode::Detailed => detailed_view::display_detailed_view_to_string(analysis),
52        DisplayMode::Summary => summary_view::display_summary_view_to_string(analysis),
53        DisplayMode::Json => json_view::display_json_view_to_string(analysis),
54    }
55}
56
57/// Combined function that both prints and returns a string
58pub fn display_analysis_with_return(analysis: &MonorepoAnalysis, mode: DisplayMode) -> String {
59    let output = display_analysis_to_string(analysis, mode);
60    print!("{}", output);
61    output
62}
63
64#[cfg(test)]
65mod tests {
66    use super::*;
67
68    #[test]
69    fn test_display_modes() {
70        // Test that display modes are properly defined
71        assert_eq!(DisplayMode::Matrix, DisplayMode::Matrix);
72        assert_ne!(DisplayMode::Matrix, DisplayMode::Detailed);
73    }
74}