1use clap::{Parser, ValueEnum};
2
3#[derive(Parser)]
4#[command(name = "bradar")]
5#[command(about = "A tool for analyzing code statistics from remote repositories")]
6#[command(version)]
7#[command(long_about = "
8A professional code analysis tool for remote repositories.
9
10SUPPORTED PLATFORMS:
11 - GitHub (github.com)
12 - GitLab (gitlab.com, self-hosted)
13 - Bitbucket (bitbucket.org)
14 - Codeberg (codeberg.org)
15 - SourceForge (sourceforge.net)
16 - Direct tar.gz/tgz URLs
17
18USAGE EXAMPLES:
19 bradar user/repo # GitHub repo (default branch)
20 bradar user/repo@master # GitHub repo with specific branch
21 bradar user/repo@abc123 # GitHub repo with specific commit
22 bradar https://github.com/user/repo # Full GitHub URL
23 bradar https://gitlab.com/user/repo # GitLab URL
24 bradar https://bitbucket.org/user/repo # Bitbucket URL
25 bradar https://example.com/file.tar.gz # Direct tar.gz URL
26 bradar -f json user/repo # JSON output format
27 bradar --token ghp_xxx user/repo # With GitHub token for private repos
28")]
29pub struct Cli {
30 #[arg(help = "URL to analyze: user/repo, user/repo@branch, or full URL")]
31 pub url: Option<String>,
32
33 #[arg(short, long, help = "Output format", value_enum)]
34 pub format: Option<OutputFormat>,
35
36 #[arg(long, help = "Show detailed file-by-file statistics")]
37 pub detailed: bool,
38
39 #[arg(short = 'd', long = "debug", help = "Enable debug output")]
40 pub debug: bool,
41
42 #[arg(long, help = "GitHub token for private repositories")]
43 pub token: Option<String>,
44
45 #[arg(long, help = "Request timeout in seconds", default_value = "300")]
46 pub timeout: u64,
47
48 #[arg(long, help = "Allow insecure HTTP connections")]
49 pub allow_insecure: bool,
50
51 #[arg(long, help = "Disable progress bar")]
52 pub no_progress: bool,
53
54 #[arg(long, help = "Quiet mode - minimal output")]
55 pub quiet: bool,
56
57 #[arg(long, help = "Enable aggressive filtering for maximum performance")]
58 pub aggressive_filter: bool,
59
60 #[arg(
61 long,
62 help = "Maximum file size to process in KB",
63 default_value = "1024"
64 )]
65 pub max_file_size: u64,
66
67 #[arg(long, help = "Include test directories")]
68 pub include_tests: bool,
69
70 #[arg(long, help = "Include documentation directories")]
71 pub include_docs: bool,
72}
73
74#[derive(Clone, ValueEnum)]
75pub enum OutputFormat {
76 #[value(name = "table")]
77 Table,
78 #[value(name = "json")]
79 Json,
80 #[value(name = "csv")]
81 Csv,
82 #[value(name = "xml")]
83 Xml,
84}
85
86impl Default for OutputFormat {
87 fn default() -> Self {
88 Self::Table
89 }
90}