From 0ea65efd6d7a98b721fcf5f62a6e549204ee01b2 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Sun, 22 Mar 2020 21:02:51 -0400 Subject: [PATCH] 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. --- crates/regex/src/literal.rs | 3 +++ 1 file changed, 3 insertions(+) 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) {