1
0
mirror of https://github.com/BurntSushi/ripgrep.git synced 2024-12-12 19:18:24 +02:00

ux: suggest --fixed-strings flag

If a regex syntax error occurs, then ripgrep will suggest
using the --fixed-strings flag.

Fixes #727
This commit is contained in:
Balaji Sivaraman 2018-01-01 21:54:46 +05:30 committed by Andrew Gallant
parent b6177f0459
commit 14779ed0ea
2 changed files with 21 additions and 2 deletions

View File

@ -11,7 +11,7 @@ use std::sync::atomic::{AtomicBool, Ordering};
use clap;
use encoding_rs::Encoding;
use env_logger;
use grep::{Grep, GrepBuilder};
use grep::{Grep, GrepBuilder, Error as GrepError};
use log;
use num_cpus;
use regex;
@ -783,7 +783,16 @@ impl<'a> ArgMatches<'a> {
if let Some(limit) = self.regex_size_limit()? {
gb = gb.size_limit(limit);
}
gb.build().map_err(From::from)
gb.build().map_err(|err| {
match err {
GrepError::Regex(err) => {
let s = format!("{}\n(Hint: Try the --fixed-strings flag \
to search for a literal string.)", err.to_string());
From::from(s)
},
err => From::from(err)
}
})
}
/// Builds the set of glob overrides from the command line flags.

View File

@ -1599,6 +1599,16 @@ sherlock!(feature_419_zero_as_shortcut_for_null, "Sherlock", ".",
assert_eq!(lines, "sherlock\x002\n");
});
// See: https://github.com/BurntSushi/ripgrep/issues/709
clean!(suggest_fixed_strings_for_invalid_regex, "foo(", ".",
|wd: WorkDir, mut cmd: Command| {
wd.assert_non_empty_stderr(&mut cmd);
let output = cmd.output().unwrap();
let err = String::from_utf8_lossy(&output.stderr);
assert_eq!(err.contains("--fixed-strings"), true);
});
#[test]
fn binary_nosearch() {
let wd = WorkDir::new("binary_nosearch");