summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Gallant <jamslam@gmail.com>2020-03-22 21:02:51 -0400
committerAndrew Gallant <jamslam@gmail.com>2020-03-22 21:02:51 -0400
commit0ea65efd6d7a98b721fcf5f62a6e549204ee01b2 (patch)
treeb2f689f8a86e981365ff1cafe4ae098042948494
parent20deae6497820587ee523a72b6326356016994a6 (diff)
regex: special case literal extraction
In a prior commit, we fixed a performance problem with the -w flag by doing a little extra work to extract literals. It turns out that using literals in this case when the -w flag is NOT used results in a performance regression. The reasoning is that we end up using a "fast" regex as a prefilter when the regex engine itself uses its own equivalent prefilter, so ripgrep ends up redoing a fair amount of work. Instead, we only do this extra work when we know the -w flag is enabled.
-rw-r--r--crates/regex/src/literal.rs3
1 files changed, 3 insertions, 0 deletions
diff --git a/crates/regex/src/literal.rs b/crates/regex/src/literal.rs
index 49bc4ca2..f1184fa1 100644
--- a/crates/regex/src/literal.rs
+++ b/crates/regex/src/literal.rs
@@ -141,6 +141,9 @@ impl LiteralSets {
// (Not in theory---it could be better. But the current
// implementation isn't good enough.) ... So we make up for it
// here.
+ if !word {
+ return None;
+ }
let p_min_len = self.prefixes.min_len();
let s_min_len = self.suffixes.min_len();
let lits = match (p_min_len, s_min_len) {