use clap::{ArgAction, Subcommand, ValueEnum};
#[derive(ValueEnum, Clone, Debug, Copy)]
#[value(rename_all = "lowercase")]
pub enum WorkspaceFlag {
All,
Parallel,
Root,
}
impl From<WorkspaceFlag> for crate::commands::script::WorkspaceMode {
fn from(f: WorkspaceFlag) -> Self {
match f {
WorkspaceFlag::All => Self::All,
WorkspaceFlag::Parallel => Self::Parallel,
WorkspaceFlag::Root => Self::Root,
}
}
}
#[derive(Subcommand, Debug, Clone)]
pub enum Commands {
#[command(about = "Run a script by name defined in Scripts.toml", visible_alias = "r")]
Run {
#[arg(value_name = "SCRIPT_NAME")]
script: Option<String>,
#[arg(short, long, value_name = "KEY=VALUE", action = ArgAction::Append)]
env: Vec<String>,
#[arg(long)]
dry_run: bool,
#[arg(short, long)]
quiet: bool,
#[arg(short = 'v', long)]
verbose: bool,
#[arg(long)]
no_metrics: bool,
#[arg(short, long)]
interactive: bool,
#[arg(long, value_enum, value_name = "MODE")]
workspace: Option<WorkspaceFlag>,
#[arg(long)]
no_workspace: bool,
#[arg(long)]
watch: bool,
#[arg(long, value_name = "PATH", action = ArgAction::Append)]
watch_path: Vec<std::path::PathBuf>,
#[arg(long, value_name = "PATTERN", action = ArgAction::Append)]
watch_exclude: Vec<String>,
#[arg(long)]
json: bool,
#[arg(long, value_name = "SCRIPT", action = ArgAction::Append)]
parallel: Vec<String>,
#[arg(trailing_var_arg = true, allow_hyphen_values = true)]
script_args: Vec<String>,
},
#[command(about = "Initialize a Scripts.toml file in the current directory")]
Init {
#[arg(short, long, value_name = "NAME")]
template: Option<String>,
#[arg(long)]
list_templates: bool,
#[arg(long)]
force: bool,
},
#[command(about = "Show all script names and descriptions defined in Scripts.toml")]
Show {
#[arg(short, long)]
quiet: bool,
#[arg(short = 'v', long)]
verbose: bool,
#[arg(short, long, value_name = "PATTERN")]
filter: Option<String>,
},
#[command(about = "Generate shell completion scripts")]
Completions {
#[arg(value_enum)]
shell: Shell,
},
#[command(about = "Validate Scripts.toml syntax, script references, and tool requirements")]
Validate {
#[arg(short, long)]
quiet: bool,
#[arg(short = 'v', long)]
verbose: bool,
},
#[command(about = "Workspace operations: list members, run a script across them, etc.")]
Workspace {
#[command(subcommand)]
cmd: WorkspaceCmd,
},
}
#[derive(Subcommand, Debug, Clone)]
pub enum WorkspaceCmd {
#[command(about = "List discovered workspace members")]
List {
#[arg(long)]
json: bool,
},
#[command(about = "Run a script in every workspace member")]
Run {
#[arg(value_name = "SCRIPT_NAME")]
script: String,
#[arg(long)]
parallel: bool,
#[arg(long)]
json: bool,
},
}
#[derive(ValueEnum, Clone, Debug)]
#[value(rename_all = "kebab-case")]
pub enum Shell {
Bash,
Zsh,
Fish,
#[value(name = "power-shell")]
PowerShell,
}
pub mod init;
pub mod script;
pub mod show;
pub mod completions;
pub mod validate;
pub mod workspace;
pub mod cargo_script;
pub mod templates;
#[cfg(feature = "parallel")]
pub mod parallel;
#[cfg(feature = "watch")]
pub mod watch;