cargo-plot 1.0.0-rc

A powerful Cargo plugin for blazing-fast filesystem scanning, structural tree visualization, and automated Markdown snapshot generation.
use clap::{Args, Parser};

#[derive(Parser, Debug, Clone)]
#[command(name = "cargo", bin_name = "cargo", version, about, long_about = None)]
pub enum CargoCliRoot {
    #[command(name = "plot", about = "Szwajcarski scyzoryk do wizualizacji struktury projektu", version)]
    Plot(PlotArgs),
}

#[derive(Args, Debug, Clone)]
pub struct PlotArgs {
    // ==========================================
    // 馃攳 OPCJE SKANOWANIA (querypath)
    // ==========================================
    /// 艢cie偶ki katalog贸w do skanowania (domy艣lnie obecny katalog)
    #[arg(short = 'd', long = "dir", default_value = ".", num_args = 1..)]
    pub dirs_to_scan: Vec<String>,

    /// Wzorce wyszukiwania (np. "*.rs", "!target/**")
    #[arg(short = 'p', long = "pattern", visible_aliases = ["pat", "patterns"], num_args = 1..)]
    pub patterns: Vec<String>,

    /// Ignoruj wielko艣膰 liter przy dopasowywaniu wzorc贸w
    #[arg(short = 'i', long = "ignore-case")]
    pub ignore_case: bool,

    // ==========================================
    // 馃帹 OPCJE WYGL膭DU (querypath-fmt) - KOLUMNY
    // ==========================================
    /// Domy艣lna szeroko艣膰 kolumny z nazw膮 pliku
    #[arg(long = "name-width", default_value_t = 25)]
    pub name_width: usize,

    /// Domy艣lna szeroko艣膰 kolumny ze 艣cie偶k膮
    #[arg(long = "path-width", default_value_t = 35)]
    pub path_width: usize,

    /// Uk艂ad kolumn: H (Struktura/Drzewo), W (Wymiar/Rozmiar), D (Data/Czas), P (艢cie偶ka). 
    /// Kolumna 'H' stanowi o艣. Przyk艂ad: "W H D P" (Wymiar po lewej, Data i 艢cie偶ka po prawej).
    #[arg(short = 'c', long = "columns", default_value = "H W D P")]
    pub columns: String,

    /// U偶yj systemu SI (KB, MB) zamiast binarnego IEC (KiB, MiB) dla rozmiar贸w plik贸w
    #[arg(short = 'B', long = "size-si")]
    pub size_si: bool,

    /// Spos贸b wy艣wietlania wagi dla katalog贸w (both, matched, none)
    #[arg(long = "dir-weight", default_value = "both")]
    pub dir_weight: String,

    /// Wzorzec formatowania daty i czasu (u偶ywa token贸w temporal-fmt)
    #[arg(short = 'Y', long = "time-fmt", default_value = "YYYY-MM-MD hh:mm")]
    pub time_format: String,

    // ==========================================
    // 馃帹 OPCJE WYGL膭DU (querypath-fmt) - WIERSZE
    // ==========================================
    /// Zwi艅/Ukryj pliki w widoku (pokazuj tylko katalogi)
    #[arg(long = "dirs-only")]
    pub dirs_only: bool,

    /// Wy艂膮cz domy艣ln膮 numeracj臋 tekstowych plik贸w w drzewie
    #[arg(long = "no-numeration")]
    pub no_numeration: bool,

    /// W艂膮cz numeracj臋 plik贸w binarnych
    #[arg(long = "numerate-binaries")]
    pub numerate_binaries: bool,

    /// W艂膮cz numeracj臋 katalog贸w
    #[arg(long = "numerate-dirs")]
    pub numerate_dirs: bool,

    // ==========================================
    // 馃攢 OPCJE SORTOWANIA (querypath-fmt)
    // ==========================================
    /// Strategia grupowania element贸w: T (TextFile), D (Directory), B (BinaryFile). Przyk艂ad: "T D B"
    #[arg(long = "group-order", default_value = "T D B")]
    pub group_order: String,

    /// Kolejno艣膰 klas znak贸w w nazwach: S (Special), D (Digit), L (Letter). Przyk艂ad: "S D L"
    #[arg(long = "char-order", default_value = "S D L")]
    pub char_order: String,

    /// Priorytet element贸w o tej samej nazwie bazowej: (file, dir)
    #[arg(long = "same-name-priority", default_value = "file")]
    pub same_name_priority: String,

    /// Priorytet element贸w bez rozszerzenia (np. "Makefile" wzgl臋dem "Makefile.toml"): (above, below)
    #[arg(long = "no-ext-priority", default_value = "above")]
    pub no_ext_priority: String,

    /// Ignoruj ukryte kropki (np. ".gitignore") podczas sortowania alfabetycznego
    #[arg(long = "ignore-leading-dot")]
    pub ignore_leading_dot: bool,

    /// Uwzgl臋dniaj wielko艣膰 liter (Case Sensitive) przy sortowaniu (domy艣lnie ignoruje)
    #[arg(long = "case-sensitive")]
    pub case_sensitive: bool,

    // ==========================================
    // 馃摝 OPCJE EKSPORTU (querypath-snapshot)
    // ==========================================
    /// 艢cie偶ka do katalogu, w kt贸rym zostanie zapisany wygenerowany raport Markdown
    #[arg(short = 'o', long = "out-dir")]
    pub out_dir: Option<String>,

    /// Tytu艂 raportu Markdown
    #[arg(short = 'u', long = "title", default_value = "CODE SNAPSHOT")]
    pub title: String,

    /// Maksymalny rozmiar pojedynczego pliku tekstowego (w bajtach) do艂膮czanego do raportu
    #[arg(long = "max-file-size", default_value_t = 524288)]
    pub max_file_size: u64,
}