docs(cookbook): Style cargo plugin

Inspired by part of the conversation at #3234
This commit is contained in:
Ed Page 2024-08-08 10:31:27 -05:00
parent ecb4dca96f
commit 631e54bc71
5 changed files with 37 additions and 3 deletions

12
Cargo.lock generated
View file

@ -413,6 +413,7 @@ name = "clap"
version = "4.5.13"
dependencies = [
"automod",
"clap-cargo",
"clap_builder 4.5.13",
"clap_derive",
"humantime",
@ -423,6 +424,15 @@ dependencies = [
"trycmd",
]
[[package]]
name = "clap-cargo"
version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23b2ea69cefa96b848b73ad516ad1d59a195cdf9263087d977f648a818c8b43e"
dependencies = [
"anstyle",
]
[[package]]
name = "clap_bench"
version = "0.0.0"
@ -1432,7 +1442,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d"
dependencies = [
"cfg-if",
"windows-targets 0.48.5",
"windows-targets 0.52.6",
]
[[package]]

View file

@ -187,6 +187,7 @@ humantime = "2.1.0"
snapbox = "0.6.16"
shlex = "1.3.0"
automod = "1.0.14"
clap-cargo = { version = "0.14.1", default-features = false }
[[example]]
name = "demo"
@ -194,11 +195,11 @@ required-features = ["derive"]
[[example]]
name = "cargo-example"
required-features = ["cargo"]
required-features = ["cargo", "color"]
[[example]]
name = "cargo-example-derive"
required-features = ["derive"]
required-features = ["derive", "color"]
[[example]]
name = "escaped-positional"

View file

@ -3,10 +3,21 @@ use clap::Parser;
#[derive(Parser)] // requires `derive` feature
#[command(name = "cargo")]
#[command(bin_name = "cargo")]
#[command(styles = CLAP_STYLING)]
enum CargoCli {
ExampleDerive(ExampleDeriveArgs),
}
// See also `clap_cargo::style::CLAP_STYLING`
pub const CLAP_STYLING: clap::builder::styling::Styles = clap::builder::styling::Styles::styled()
.header(clap_cargo::style::HEADER)
.usage(clap_cargo::style::USAGE)
.literal(clap_cargo::style::LITERAL)
.placeholder(clap_cargo::style::PLACEHOLDER)
.error(clap_cargo::style::ERROR)
.valid(clap_cargo::style::VALID)
.invalid(clap_cargo::style::INVALID);
#[derive(clap::Args)]
#[command(version, about, long_about = None)]
struct ExampleDeriveArgs {

View file

@ -1,6 +1,7 @@
fn main() {
let cmd = clap::Command::new("cargo")
.bin_name("cargo")
.styles(CLAP_STYLING)
.subcommand_required(true)
.subcommand(
clap::command!("example").arg(
@ -16,3 +17,13 @@ fn main() {
let manifest_path = matches.get_one::<std::path::PathBuf>("manifest-path");
println!("{manifest_path:?}");
}
// See also `clap_cargo::style::CLAP_STYLING`
pub const CLAP_STYLING: clap::builder::styling::Styles = clap::builder::styling::Styles::styled()
.header(clap_cargo::style::HEADER)
.usage(clap_cargo::style::USAGE)
.literal(clap_cargo::style::LITERAL)
.placeholder(clap_cargo::style::PLACEHOLDER)
.error(clap_cargo::style::ERROR)
.valid(clap_cargo::style::VALID)
.invalid(clap_cargo::style::INVALID);

View file

@ -15,6 +15,7 @@
//! - Topics:
//! - Subcommands
//! - Cargo plugins
//! - custom terminal [styles][crate::Command::styles] (colors)
//!
//! find-like interface: [builder][find]
//! - Topics: