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