Handle smart case per each pattern separately #1980
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When
-S
/--smart-case
is enabled, analyze and apply a case-insensitivity flag to each search pattern separately rather than globally.For the PCRE2 engine, wrap case-insensitive expressions into
(?i:…)
. I.e.rg --pcre2 --smart-case -e foo -e bAr
gives(?i:foo)|bAr
.For the default engine, produce each expression HIR separately, then combine them using
Hir::alternation
. Although the PCRE2 approach is also possible, it turned out to be slower on large pattern files.Fixes #1791
As a side effect, each pattern is validated separately in the default engine; thus, this no longer works:
Also, this could be considered as a first step in fixing #478.