mirror of
https://github.com/clap-rs/clap
synced 2024-12-13 06:12:40 +00:00
Merge pull request #4049 from danielparks/issue-3785-derive-id-attr
fix(derive): Add "id" attribute
This commit is contained in:
commit
a98bcb4d13
3 changed files with 58 additions and 2 deletions
|
@ -400,7 +400,7 @@ impl Attrs {
|
|||
}
|
||||
|
||||
fn push_method(&mut self, name: Ident, arg: impl ToTokens) {
|
||||
if name == "name" {
|
||||
if name == "name" || name == "id" {
|
||||
self.name = Name::Assigned(quote!(#arg));
|
||||
} else if name == "value_parser" {
|
||||
self.value_parser = Some(ValueParser::Explicit(Method::new(name, quote!(#arg))));
|
||||
|
|
|
@ -181,7 +181,7 @@
|
|||
//! - e.g. `#[clap(max_values(3))]` would translate to `arg.max_values(3)`
|
||||
//!
|
||||
//! **Magic attributes**:
|
||||
//! - `name = <expr>`: [`Arg::id`][crate::Arg::id]
|
||||
//! - `id = <expr>`: [`Arg::id`][crate::Arg::id]
|
||||
//! - When not present: case-converted field name is used
|
||||
//! - `value_parser [= <expr>]`: [`Arg::value_parser`][crate::Arg::value_parser]
|
||||
//! - When not present: will auto-select an implementation based on the field type using
|
||||
|
|
|
@ -57,6 +57,34 @@ fn test_standalone_long_ignores_afterwards_defined_custom_name() {
|
|||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_standalone_long_uses_previous_defined_custom_id() {
|
||||
#[derive(Parser, Debug, PartialEq)]
|
||||
struct Opt {
|
||||
#[clap(id = "foo", long)]
|
||||
foo_option: bool,
|
||||
}
|
||||
|
||||
assert_eq!(
|
||||
Opt { foo_option: true },
|
||||
Opt::try_parse_from(&["test", "--foo"]).unwrap()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_standalone_long_ignores_afterwards_defined_custom_id() {
|
||||
#[derive(Parser, Debug, PartialEq)]
|
||||
struct Opt {
|
||||
#[clap(long, id = "foo")]
|
||||
foo_option: bool,
|
||||
}
|
||||
|
||||
assert_eq!(
|
||||
Opt { foo_option: true },
|
||||
Opt::try_parse_from(&["test", "--foo-option"]).unwrap()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_standalone_short_generates_kebab_case() {
|
||||
#[derive(Parser, Debug, PartialEq)]
|
||||
|
@ -114,6 +142,34 @@ fn test_standalone_short_ignores_afterwards_defined_custom_name() {
|
|||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_standalone_short_uses_previous_defined_custom_id() {
|
||||
#[derive(Parser, Debug, PartialEq)]
|
||||
struct Opt {
|
||||
#[clap(id = "option", short)]
|
||||
foo_option: bool,
|
||||
}
|
||||
|
||||
assert_eq!(
|
||||
Opt { foo_option: true },
|
||||
Opt::try_parse_from(&["test", "-o"]).unwrap()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_standalone_short_ignores_afterwards_defined_custom_id() {
|
||||
#[derive(Parser, Debug, PartialEq)]
|
||||
struct Opt {
|
||||
#[clap(short, id = "option")]
|
||||
foo_option: bool,
|
||||
}
|
||||
|
||||
assert_eq!(
|
||||
Opt { foo_option: true },
|
||||
Opt::try_parse_from(&["test", "-f"]).unwrap()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_standalone_long_uses_previous_defined_casing() {
|
||||
#[derive(Parser, Debug, PartialEq)]
|
||||
|
|
Loading…
Reference in a new issue