diff --git a/Cargo.toml b/Cargo.toml index ab7640c..14b9446 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ cargo = "0.82.0" cargo-util = "0.2" semver = "1.0.3" log = "0.4" -clap = { version = "4.0.29", features = ["color", "derive", "cargo", "string"] } +clap = { version = "4.5.18", features = ["color", "derive", "cargo", "string", "wrap_help"] } regex = "1.5.6" cbindgen = { version="0.27.0", default-features=false } toml = "0.8" diff --git a/src/bin/capi.rs b/src/bin/capi.rs index c4d7696..b74252d 100644 --- a/src/bin/capi.rs +++ b/src/bin/capi.rs @@ -16,18 +16,15 @@ fn main() -> CliResult { let cli_install = subcommand_install("install", "Install the crate C-API"); let cli_test = subcommand_test("test"); - let mut app = clap::command!() - .dont_collapse_args_in_usage(true) - .allow_external_subcommands(true) - .subcommand( - Command::new("capi") - .allow_external_subcommands(true) - .about("Build or install the crate C-API") - .arg(flag("version", "Print version info and exit").short('V')) - .subcommand(cli_build) - .subcommand(cli_install) - .subcommand(cli_test), - ); + let mut app = main_cli().subcommand( + Command::new("capi") + .allow_external_subcommands(true) + .about("Build or install the crate C-API") + .arg(flag("version", "Print version info and exit").short('V')) + .subcommand(cli_build) + .subcommand(cli_install) + .subcommand(cli_test), + ); let args = app.clone().get_matches(); diff --git a/src/bin/cbuild.rs b/src/bin/cbuild.rs index 903822b..663fc55 100644 --- a/src/bin/cbuild.rs +++ b/src/bin/cbuild.rs @@ -3,18 +3,14 @@ use cargo::CliResult; use cargo::GlobalContext; use cargo_c::build::*; -use cargo_c::cli::run_cargo_fallback; -use cargo_c::cli::subcommand_build; +use cargo_c::cli::{main_cli, run_cargo_fallback, subcommand_build}; use cargo_c::config::*; fn main() -> CliResult { let mut config = GlobalContext::default()?; let subcommand = subcommand_build("cbuild", "Build the crate C-API"); - let mut app = clap::command!() - .dont_collapse_args_in_usage(true) - .allow_external_subcommands(true) - .subcommand(subcommand); + let mut app = main_cli().subcommand(subcommand); let args = app.clone().get_matches(); diff --git a/src/bin/cinstall.rs b/src/bin/cinstall.rs index 7553f95..76f855c 100644 --- a/src/bin/cinstall.rs +++ b/src/bin/cinstall.rs @@ -3,8 +3,7 @@ use cargo::CliResult; use cargo::GlobalContext; use cargo_c::build::cbuild; -use cargo_c::cli::run_cargo_fallback; -use cargo_c::cli::subcommand_install; +use cargo_c::cli::{main_cli, run_cargo_fallback, subcommand_install}; use cargo_c::config::global_context_configure; use cargo_c::install::cinstall; @@ -12,10 +11,7 @@ fn main() -> CliResult { let mut config = GlobalContext::default()?; let subcommand = subcommand_install("cinstall", "Install the crate C-API"); - let mut app = clap::command!() - .dont_collapse_args_in_usage(true) - .allow_external_subcommands(true) - .subcommand(subcommand); + let mut app = main_cli().subcommand(subcommand); let args = app.clone().get_matches(); diff --git a/src/bin/ctest.rs b/src/bin/ctest.rs index 531a9d5..3717aa6 100644 --- a/src/bin/ctest.rs +++ b/src/bin/ctest.rs @@ -1,8 +1,7 @@ use cargo::util::command_prelude::*; use cargo_c::build::*; -use cargo_c::cli::run_cargo_fallback; -use cargo_c::cli::subcommand_test; +use cargo_c::cli::{main_cli, run_cargo_fallback, subcommand_test}; use cargo_c::config::*; fn main() -> CliResult { @@ -10,10 +9,7 @@ fn main() -> CliResult { let subcommand = subcommand_test("ctest"); - let mut app = clap::command!() - .dont_collapse_args_in_usage(true) - .allow_external_subcommands(true) - .subcommand(subcommand); + let mut app = main_cli().subcommand(subcommand); let args = app.clone().get_matches(); diff --git a/src/cli.rs b/src/cli.rs index 43293aa..5118160 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -3,7 +3,7 @@ use std::path::PathBuf; use cargo::util::command_prelude::CommandExt; use cargo::util::command_prelude::{flag, multi_opt, opt}; -use cargo::util::{CliError, CliResult}; +use cargo::util::{style, CliError, CliResult}; use cargo_util::{ProcessBuilder, ProcessError}; @@ -57,6 +57,23 @@ struct Common { meson: bool, } +pub fn main_cli() -> Command { + let styles = { + clap::builder::styling::Styles::styled() + .header(style::HEADER) + .usage(style::USAGE) + .literal(style::LITERAL) + .placeholder(style::PLACEHOLDER) + .error(style::ERROR) + .valid(style::VALID) + .invalid(style::INVALID) + }; + clap::command!() + .dont_collapse_args_in_usage(true) + .allow_external_subcommands(true) + .styles(styles) +} + fn base_cli() -> Command { let default_target = Target::new::<&str>(None, false); let app = Common::command()