Skip to content

Commit

Permalink
Merge pull request #2820 from epage/option
Browse files Browse the repository at this point in the history
fix(derive): Support SubcommandsNegateReqs
  • Loading branch information
epage authored Oct 6, 2021
2 parents 62eff1f + 9afa08f commit 6fd3e0b
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 29 deletions.
3 changes: 0 additions & 3 deletions clap_derive/src/attrs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -717,9 +717,6 @@ impl Attrs {
if let Some(m) = res.find_method("default_value") {
abort!(m.name, "default_value is meaningless for Option")
}
if let Some(m) = res.find_method("required") {
abort!(m.name, "required is meaningless for Option")
}
}
Ty::OptionOption => {
if res.is_positional() {
Expand Down
39 changes: 39 additions & 0 deletions clap_derive/tests/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -298,3 +298,42 @@ fn two_optional_vecs() {

assert_eq!(Opt { arg: None, b: None }, Opt::parse_from(&["test"]));
}

#[test]
fn required_option_type() {
#[derive(Debug, PartialEq, Eq, Clap)]
#[clap(setting(clap::AppSettings::SubcommandsNegateReqs))]
struct Opt {
#[clap(required = true)]
req_str: Option<String>,

#[clap(subcommand)]
cmd: Option<SubCommands>,
}

#[derive(Debug, PartialEq, Eq, Clap)]
enum SubCommands {
ExSub {
#[clap(short, long, parse(from_occurrences))]
verbose: u8,
},
}

assert_eq!(
Opt {
req_str: Some(("arg").into()),
cmd: None,
},
Opt::parse_from(&["test", "arg"])
);

assert_eq!(
Opt {
req_str: None,
cmd: Some(SubCommands::ExSub { verbose: 1 }),
},
Opt::parse_from(&["test", "ex-sub", "-v"])
);

assert!(Opt::try_parse_from(&["test"]).is_err());
}
21 changes: 0 additions & 21 deletions clap_derive/tests/ui/option_required.rs

This file was deleted.

5 changes: 0 additions & 5 deletions clap_derive/tests/ui/option_required.stderr

This file was deleted.

0 comments on commit 6fd3e0b

Please sign in to comment.