Allow options with non-numeric arguments to accept leading hyphens in arguments (fixes #568)

This commit is contained in:
dana 2017-07-29 10:54:10 -05:00 committed by Andrew Gallant
parent d4b790fd8d
commit 6dce04963d
2 changed files with 20 additions and 1 deletions

View File

@ -90,9 +90,11 @@ pub fn app() -> App<'static, 'static> {
.arg(flag("fixed-strings").short("F")) .arg(flag("fixed-strings").short("F"))
.arg(flag("glob").short("g") .arg(flag("glob").short("g")
.takes_value(true).multiple(true).number_of_values(1) .takes_value(true).multiple(true).number_of_values(1)
.set(ArgSettings::AllowLeadingHyphen)
.value_name("GLOB")) .value_name("GLOB"))
.arg(flag("iglob") .arg(flag("iglob")
.takes_value(true).multiple(true).number_of_values(1) .takes_value(true).multiple(true).number_of_values(1)
.set(ArgSettings::AllowLeadingHyphen)
.value_name("GLOB")) .value_name("GLOB"))
.arg(flag("ignore-case").short("i")) .arg(flag("ignore-case").short("i"))
.arg(flag("line-number").short("n")) .arg(flag("line-number").short("n"))
@ -126,6 +128,7 @@ pub fn app() -> App<'static, 'static> {
.arg(flag("debug")) .arg(flag("debug"))
.arg(flag("file").short("f") .arg(flag("file").short("f")
.value_name("FILE").takes_value(true) .value_name("FILE").takes_value(true)
.set(ArgSettings::AllowLeadingHyphen)
.multiple(true).number_of_values(1)) .multiple(true).number_of_values(1))
.arg(flag("files-with-matches").short("l")) .arg(flag("files-with-matches").short("l"))
.arg(flag("files-without-match")) .arg(flag("files-without-match"))
@ -136,6 +139,7 @@ pub fn app() -> App<'static, 'static> {
.arg(flag("hidden")) .arg(flag("hidden"))
.arg(flag("ignore-file") .arg(flag("ignore-file")
.value_name("FILE").takes_value(true) .value_name("FILE").takes_value(true)
.set(ArgSettings::AllowLeadingHyphen)
.multiple(true).number_of_values(1)) .multiple(true).number_of_values(1))
.arg(flag("follow").short("L")) .arg(flag("follow").short("L"))
.arg(flag("max-count") .arg(flag("max-count")
@ -156,7 +160,9 @@ pub fn app() -> App<'static, 'static> {
.arg(flag("only-matching").short("o").conflicts_with("replace")) .arg(flag("only-matching").short("o").conflicts_with("replace"))
.arg(flag("path-separator").value_name("SEPARATOR").takes_value(true)) .arg(flag("path-separator").value_name("SEPARATOR").takes_value(true))
.arg(flag("pretty").short("p")) .arg(flag("pretty").short("p"))
.arg(flag("replace").short("r").value_name("ARG").takes_value(true)) .arg(flag("replace").short("r")
.set(ArgSettings::AllowLeadingHyphen)
.value_name("ARG").takes_value(true))
.arg(flag("regex-size-limit") .arg(flag("regex-size-limit")
.value_name("NUM+SUFFIX?").takes_value(true)) .value_name("NUM+SUFFIX?").takes_value(true))
.arg(flag("case-sensitive").short("s")) .arg(flag("case-sensitive").short("s"))

View File

@ -1705,6 +1705,7 @@ fn regression_483_non_matching_exit_code() {
wd.assert_err(&mut cmd); wd.assert_err(&mut cmd);
} }
// See: https://github.com/BurntSushi/ripgrep/issues/506 // See: https://github.com/BurntSushi/ripgrep/issues/506
#[test] #[test]
fn regression_506_word_boundaries_not_parenthesized() { fn regression_506_word_boundaries_not_parenthesized() {
@ -1720,7 +1721,19 @@ fn regression_506_word_boundaries_not_parenthesized() {
let expected = "min\nmax\n"; let expected = "min\nmax\n";
assert_eq!(lines, expected); assert_eq!(lines, expected);
}
// See: https://github.com/BurntSushi/ripgrep/issues/568
#[test]
fn regression_568_leading_hyphen_option_arguments() {
let wd = WorkDir::new("regression_568_leading_hyphen_option_arguments");
let path = "file";
wd.create(path, "foo bar baz\n");
let mut cmd = wd.command();
cmd.arg("-r").arg("-n").arg("-i").arg("bar").arg(path);
let lines: String = wd.stdout(&mut cmd);
assert_eq!(lines, "foo -n baz\n");
} }
#[test] #[test]