1
0
mirror of https://github.com/BurntSushi/ripgrep.git synced 2025-01-13 21:28:13 +02:00

args: treat --count --only-matching as --count-matches

Namely, when ripgrep is asked to count things and is also asked to print
every match on its own line, then we should just automatically count the
matches and not the lines. This is a departure from how GNU grep behaves,
but there is a compelling argument to be made that GNU grep's behavior
doesn't make a lot of sense.

Note that since this changes the behavior of combining two existing
flags, this is a breaking change.
This commit is contained in:
Andrew Gallant 2018-03-10 10:34:35 -05:00
parent 27fc9f2fd3
commit 11a8f0eaf0
No known key found for this signature in database
GPG Key ID: B2E3A4923F8B0D44
3 changed files with 19 additions and 4 deletions

View File

@ -784,7 +784,8 @@ If only one file is given to ripgrep, then only the count is printed if there
is a match. The --with-filename flag can be used to force printing the file
path in this case.
This overrides the --count-matches flag.
This overrides the --count-matches flag. Note that when --count is combined
with --only-matching, then ripgrep behaves as if --count-matches was given.
");
let arg = RGArg::switch("count").short("c")
.help(SHORT).long_help(LONG).overrides("count-matches");
@ -805,7 +806,8 @@ If only one file is given to ripgrep, then only the count is printed if there
is a match. The --with-filename flag can be used to force printing the file
path in this case.
This overrides the --count flag.
This overrides the --count flag. Note that when --count is combined with
--only-matching, then ripgrep behaves as if --count-matches was given.
");
let arg = RGArg::switch("count-matches")
.help(SHORT).long_help(LONG).overrides("count");

View File

@ -747,10 +747,16 @@ impl<'a> ArgMatches<'a> {
let count = self.is_present("count");
let count_matches = self.is_present("count-matches");
let invert_matches = self.is_present("invert-match");
let only_matching = self.is_present("only-matching");
if count_matches && invert_matches {
return (true, false);
// Treat `-v --count-matches` as `-v -c`.
(true, false)
} else if count && only_matching {
// Treat `-c --only-matching` as `--count-matches`.
(false, true)
} else {
(count, count_matches)
}
(count, count_matches)
}
/// Returns the user's color choice based on command line parameters and

View File

@ -426,6 +426,13 @@ sherlock!(count_matches_inverted, "Sherlock", ".", |wd: WorkDir, mut cmd: Comman
assert_eq!(lines, expected);
});
sherlock!(count_matches_via_only, "the", ".", |wd: WorkDir, mut cmd: Command| {
cmd.arg("--count").arg("--only-matching");
let lines: String = wd.stdout(&mut cmd);
let expected = "sherlock:4\n";
assert_eq!(lines, expected);
});
sherlock!(files_with_matches, "Sherlock", ".", |wd: WorkDir, mut cmd: Command| {
cmd.arg("--files-with-matches");
let lines: String = wd.stdout(&mut cmd);