Skip to content

index: measure regexp optimizer thresholds in runes - #1149

Merged
keegancsmith merged 1 commit into
mainfrom
k/fix-regexp-rune-threshold
Aug 26, 2026
Merged

index: measure regexp optimizer thresholds in runes#1149
keegancsmith merged 1 commit into
mainfrom
k/fix-regexp-rune-threshold

Conversation

@keegancsmith

Copy link
Copy Markdown
Member

Zoekt indexes rune trigrams, but the regexp optimizer currently decides whether a literal is large enough by measuring its UTF-8 byte length. Non-ASCII literals can therefore cross the optimizer threshold despite containing fewer than three runes, only to fall back to a different matcher when the substring planner counts runes correctly.

This makes the optimizer use the parsed regexp rune count and adds coverage around two-rune and three-rune Unicode literals, including the alternation shape from #1147. This is intentionally independent hardening rather than the complete symbol-alternation fix: the equivalent ASCII alternation still requires the separate symbol-planning change.

Validated with go test ./... -short -count=1 and go build ./cmd/....

The trigram optimizer operates on rune trigrams, but its eligibility check measured UTF-8 bytes. This sent short non-ASCII literals through an inconsistent planning path and could produce surprising composite trees.

Use the parsed rune count so the optimizer and substring planner apply the same threshold.

Amp-Thread-ID: https://ampcode.com/threads/T-01a03d06-0149-77e8-9156-33171018a250
@keegancsmith keegancsmith changed the title Measure regexp optimizer thresholds in runes index: measure regexp optimizer thresholds in runes Aug 26, 2026
@keegancsmith
keegancsmith marked this pull request as ready for review August 26, 2026 10:24
@keegancsmith
keegancsmith requested review from a team and burmudar August 26, 2026 10:25
@keegancsmith
keegancsmith merged commit a920600 into main Aug 26, 2026
7 checks passed
@keegancsmith
keegancsmith deleted the k/fix-regexp-rune-threshold branch August 26, 2026 11:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants