Skip to content

Commit

Permalink
Merge #2821 #2822
Browse files Browse the repository at this point in the history
2821: test(derive): Port structopt flatten coverage r=epage a=epage



2822: feat(derive): Add support for lower/upper in rename_all r=epage a=epage



Co-authored-by: Ed Page <eopage@gmail.com>
  • Loading branch information
bors[bot] and epage committed Oct 7, 2021
3 parents 00f7fe5 + f681e46 + e10b528 commit 6c2daef
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 10 deletions.
10 changes: 10 additions & 0 deletions clap_derive/src/attrs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,10 @@ pub enum CasingStyle {
ScreamingSnake,
/// Keep all letters lowercase and indicate word boundaries with underscores.
Snake,
/// Keep all letters lowercase and remove word boundaries.
Lower,
/// Keep all letters uppercase and remove word boundaries.
Upper,
/// Use the original attribute name defined in the code.
Verbatim,
}
Expand Down Expand Up @@ -206,6 +210,8 @@ impl CasingStyle {
"pascal" | "pascalcase" => cs(Pascal),
"screamingsnake" | "screamingsnakecase" => cs(ScreamingSnake),
"snake" | "snakecase" => cs(Snake),
"lower" | "lowercase" => cs(Lower),
"upper" | "uppercase" => cs(Upper),
"verbatim" | "verbatimcase" => cs(Verbatim),
s => abort!(name, "unsupported casing: `{}`", s),
}
Expand All @@ -226,6 +232,8 @@ impl Name {
Camel => s.to_mixed_case(),
ScreamingSnake => s.to_shouty_snake_case(),
Snake => s.to_snake_case(),
Lower => s.to_snake_case().replace("_", ""),
Upper => s.to_shouty_snake_case().replace("_", ""),
Verbatim => s,
};
quote_spanned!(ident.span()=> #s)
Expand All @@ -246,6 +254,8 @@ impl Name {
Camel => s.to_mixed_case(),
ScreamingSnake => s.to_shouty_snake_case(),
Snake => s.to_snake_case(),
Lower => s.to_snake_case(),
Upper => s.to_shouty_snake_case(),
Verbatim => s,
};

Expand Down
28 changes: 28 additions & 0 deletions clap_derive/tests/argument_naming.rs
Original file line number Diff line number Diff line change
Expand Up @@ -288,3 +288,31 @@ fn test_rename_all_is_propagation_can_be_overridden() {
Opt::parse_from(&["test", "SECOND_VARIANT", "--foo-option"])
);
}

#[test]
fn test_lower_is_renamed() {
#[derive(Clap, Debug, PartialEq)]
struct Opt {
#[clap(rename_all = "lower", long)]
foo_option: bool,
}

assert_eq!(
Opt { foo_option: true },
Opt::parse_from(&["test", "--foooption"])
);
}

#[test]
fn test_upper_is_renamed() {
#[derive(Clap, Debug, PartialEq)]
struct Opt {
#[clap(rename_all = "upper", long)]
foo_option: bool,
}

assert_eq!(
Opt { foo_option: true },
Opt::parse_from(&["test", "--FOOOPTION"])
);
}
28 changes: 18 additions & 10 deletions clap_derive/tests/flatten.rs
Original file line number Diff line number Diff line change
Expand Up @@ -155,21 +155,29 @@ fn update_subcommands_with_flatten() {

#[test]
fn flatten_with_doc_comment() {
#[derive(Clap, Debug)]
struct DaemonOpts {
#[clap(short)]
user: String,
#[clap(short)]
group: String,
#[derive(Clap, PartialEq, Debug)]
struct Common {
/// This is an arg. Arg means "argument". Command line argument.
arg: i32,
}

#[derive(Clap, Debug)]
#[clap(name = "basic")]
#[derive(Clap, PartialEq, Debug)]
struct Opt {
/// A very important doc comment I just can't leave out!
/// The very important comment that clippy had me put here.
/// It knows better.
#[clap(flatten)]
opts: DaemonOpts,
common: Common,
}
assert_eq!(
Opt {
common: Common { arg: 42 }
},
Opt::parse_from(&["test", "42"])
);

let help = utils::get_help::<Opt>();
assert!(help.contains("This is an arg."));
assert!(!help.contains("The very important"));
}

#[test]
Expand Down

0 comments on commit 6c2daef

Please sign in to comment.