fix(macOS): unify find/replace match scanning with highlight logic#249
Draft
cursor[bot] wants to merge 1 commit into
Draft
fix(macOS): unify find/replace match scanning with highlight logic#249cursor[bot] wants to merge 1 commit into
cursor[bot] wants to merge 1 commit into
Conversation
Find highlights used query.lowercased() while Replace All and next-match used the raw query, both with .caseInsensitive. That can diverge under locale-sensitive folding so highlighted spans could disagree with what Replace / Replace All actually edits. Route all three through one helper and add unit tests for the range collector. Co-authored-by: Danny Peck <dannypeck@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Find-in-note highlights were built by searching for
query.lowercased()with.caseInsensitive, while Replace All and next-match navigation searched for the rawquerywith.caseInsensitive. Those two approaches can disagree under locale-sensitive Unicode case folding, so the yellow highlights could cover different substrings than Replace / Replace All would modify.Changes
LinkAwareTextView.caseInsensitiveNonOverlappingMatchRanges(in:query:maxCount:)and use it for highlights (cap 2000), Replace All (no cap), andnextMatchIndex(cap 2000).LinkAwareTextViewFindMatchRangesTeststo lock in basic behavior.Validation
npm installandnpx vitest runinweb/(257 tests passed). macOS XCTest was not executed in this Linux environment.