use clap::{Parser, Subcommand};
use std::path::PathBuf;
#[derive(Parser)]
#[command(name = "jbuild")]
#[command(version = "0.1.3")]
#[command(about = "jbuild - High-performance Java build tool supporting Maven and Gradle", long_about = None)]
pub struct Cli {
#[command(subcommand)]
pub command: Option<Commands>,
#[arg(trailing_var_arg = true)]
pub goals: Vec<String>,
#[arg(short = 'D', long = "define", value_name = "PROPERTY")]
pub define: Vec<String>,
#[arg(short = 'P', long = "activate-profiles", value_name = "PROFILES")]
pub profiles: Vec<String>,
#[arg(long = "offline")]
pub offline: bool,
#[arg(long = "batch-mode", short = 'B')]
pub batch_mode: bool,
#[arg(long = "show-errors")]
pub show_errors: bool,
#[arg(short = 'q', long = "quiet")]
pub quiet: bool,
#[arg(short = 'X', long = "debug")]
pub debug: bool,
#[arg(short = 'f', long = "file", value_name = "FILE")]
pub file: Option<PathBuf>,
#[arg(long = "use-wrapper")]
pub use_wrapper: bool,
}
#[derive(Subcommand, Debug, Clone)]
pub enum Commands {
Validate,
Compile,
Test,
Package,
Install,
Deploy,
Clean,
Build,
Check,
Run {
#[arg(trailing_var_arg = true)]
args: Vec<String>,
#[arg(short = 'm', long = "main-class")]
main_class: Option<String>,
#[arg(long = "example")]
example: Option<String>,
},
Lint {
#[arg(short = 'c', long = "config")]
config: Option<PathBuf>,
#[arg(trailing_var_arg = true)]
files: Vec<PathBuf>,
},
New {
name: String,
#[arg(short = 't', long = "template", default_value = "app")]
template: String,
#[arg(short = 'b', long = "build-system", default_value = "maven")]
build_system: String,
},
Tree,
Add {
dependency: String,
#[arg(long = "dev")]
dev: bool,
},
Init {
#[arg(short = 'b', long = "build-system", default_value = "maven")]
build_system: String,
},
Remove {
dependency: String,
},
Search {
query: String,
#[arg(short = 'n', long = "limit", default_value = "10")]
limit: usize,
},
Completions {
shell: clap_complete::Shell,
},
Update {
#[arg(value_name = "DEPENDENCY")]
dependency: Option<String>,
},
Info {
package: String,
},
Outdated,
Fmt {
#[arg(trailing_var_arg = true)]
files: Vec<PathBuf>,
#[arg(long = "check")]
check: bool,
},
Doc {
#[arg(long = "open")]
open: bool,
#[arg(short = 'o', long = "output")]
output: Option<PathBuf>,
},
Audit,
Watch {
#[arg(long = "test")]
test: bool,
#[arg(short = 'w', long = "watch")]
watch_paths: Vec<PathBuf>,
},
WorkspaceNew { name: String },
WorkspaceAdd { path: String },
WorkspaceRemove { path: String },
WorkspaceList,
WorkspaceBuild {
#[arg(trailing_var_arg = true)]
goals: Vec<String>,
},
}