printer: add --passthru flag
The --passthru flag causes ripgrep to print every line, even if the line does not contain a match. This is a response to the common pattern of `^|foo` to match every line, while still highlighting things like `foo`. Fixes #740
This commit is contained in:
@@ -166,6 +166,8 @@ pub fn app() -> App<'static, 'static> {
|
||||
.arg(flag("no-ignore-vcs"))
|
||||
.arg(flag("null").short("0"))
|
||||
.arg(flag("only-matching").short("o"))
|
||||
.arg(flag("passthru").alias("passthrough")
|
||||
.conflicts_with_all(&["only-matching", "replace"]))
|
||||
.arg(flag("path-separator").value_name("SEPARATOR").takes_value(true))
|
||||
.arg(flag("pretty").short("p"))
|
||||
.arg(flag("replace").short("r")
|
||||
@@ -499,6 +501,8 @@ lazy_static! {
|
||||
"Print only matched parts of a line.",
|
||||
"Print only the matched (non-empty) parts of a matching line, \
|
||||
with each such part on a separate output line.");
|
||||
doc!(h, "passthru",
|
||||
"Show both matching and non-matching lines.");
|
||||
doc!(h, "path-separator",
|
||||
"Path separator to use when printing file paths.",
|
||||
"The path separator to use when printing file paths. This \
|
||||
|
||||
10
src/args.rs
10
src/args.rs
@@ -433,7 +433,9 @@ impl<'a> ArgMatches<'a> {
|
||||
/// Note that if -F/--fixed-strings is set, then all patterns will be
|
||||
/// escaped. Similarly, if -w/--word-regexp is set, then all patterns
|
||||
/// are surrounded by `\b`, and if -x/--line-regexp is set, then all
|
||||
/// patterns are surrounded by `^...$`.
|
||||
/// patterns are surrounded by `^...$`. Finally, if --passthru is set,
|
||||
/// the pattern `^` is added to the end (to ensure that it works as
|
||||
/// expected with multiple -e/-f patterns).
|
||||
///
|
||||
/// If any pattern is invalid UTF-8, then an error is returned.
|
||||
fn patterns(&self) -> Result<Vec<String>> {
|
||||
@@ -470,7 +472,11 @@ impl<'a> ArgMatches<'a> {
|
||||
}
|
||||
}
|
||||
}
|
||||
if pats.is_empty() {
|
||||
// It's important that this be at the end; otherwise it would always
|
||||
// match first, and we wouldn't get colours in the output
|
||||
if self.is_present("passthru") && !self.is_present("count") {
|
||||
pats.push("^".to_string())
|
||||
} else if pats.is_empty() {
|
||||
pats.push(self.empty_pattern())
|
||||
}
|
||||
Ok(pats)
|
||||
|
||||
Reference in New Issue
Block a user