From e4ebd082cef45da9a165e90f459ece1bab3ee329 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Mon, 25 May 2026 17:41:58 -0700 Subject: [PATCH] perf(addon-search): cache lowercased line text in line cache Lazily store a lowercased line variant in the line cache entry to avoid repeated toLowerCase calls during case-insensitive searches. Co-authored-by: Cursor --- addons/addon-search/src/SearchEngine.ts | 12 +++++++++++- addons/addon-search/src/SearchLineCache.ts | 6 +++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/addons/addon-search/src/SearchEngine.ts b/addons/addon-search/src/SearchEngine.ts index 3f4efb0cd..c14822d21 100644 --- a/addons/addon-search/src/SearchEngine.ts +++ b/addons/addon-search/src/SearchEngine.ts @@ -292,7 +292,17 @@ export class SearchEngine { let searchStringLine = stringLine; if (!searchOptions.regex) { searchTerm = searchOptions.caseSensitive ? term : term.toLowerCase(); - searchStringLine = searchOptions.caseSensitive ? stringLine : stringLine.toLowerCase(); + if (searchOptions.caseSensitive) { + searchStringLine = stringLine; + } else { + let lowerLine = cache[2]; + if (!lowerLine) { + lowerLine = stringLine.toLowerCase(); + cache[2] = lowerLine; + this._lineCache.setLineInCache(row, cache); + } + searchStringLine = lowerLine; + } } let resultIndex = -1; diff --git a/addons/addon-search/src/SearchLineCache.ts b/addons/addon-search/src/SearchLineCache.ts index 526f4bfcc..714b52203 100644 --- a/addons/addon-search/src/SearchLineCache.ts +++ b/addons/addon-search/src/SearchLineCache.ts @@ -15,7 +15,11 @@ export type LineCacheEntry = [ /** * The offsets where each line starts when the entry describes a wrapped line. */ - lineOffsets: number[] + lineOffsets: number[], + /** + * Lowercased line text for case-insensitive searches, lazily populated. + */ + lineAsLower?: string ]; /**