Skip to content

Match an anchor across mixed line endings - #787

Merged
SimonCropp merged 3 commits into
mainfrom
fix-patcher-mixed-eol-anchor
Aug 22, 2026
Merged

Match an anchor across mixed line endings#787
SimonCropp merged 3 commits into
mainfrom
fix-patcher-mixed-eol-anchor

Conversation

@SimonCropp

Copy link
Copy Markdown
Member

The anchor is normalised to the file's dominant line ending before the search.
That is right for writing the replacement and wrong for finding what to replace:
Matches compared byte for byte, so a literal whose own lines use the other
ending was not the expression the test run sent, and the snapshot could not be
patched at all.

Mixed endings inside one file are ordinary rather than exotic - a merge, an
editor that only normalises what it touches, a generated region. The failure is
also silent in the unhelpful direction: the report is that the previous expected
expression was not found, which reads as "the source moved on", so re-running
the test produces the same message forever.

Keep the ordinal compare as the fast path and fall back to comparing with
newlines normalised on both sides. The splice still uses the argument's real
span, so nothing about what gets written changes.

The anchor is normalised to the file's dominant line ending before the search.
That is right for writing the replacement and wrong for finding what to replace:
Matches compared byte for byte, so a literal whose own lines use the other
ending was not the expression the test run sent, and the snapshot could not be
patched at all.

Mixed endings inside one file are ordinary rather than exotic - a merge, an
editor that only normalises what it touches, a generated region. The failure is
also silent in the unhelpful direction: the report is that the previous expected
expression was not found, which reads as "the source moved on", so re-running
the test produces the same message forever.

Keep the ordinal compare as the fast path and fall back to comparing with
newlines normalised on both sides. The splice still uses the argument's real
span, so nothing about what gets written changes.
…-anchor

# Conflicts:
#	src/DiffEngine.Tests/InlinePatcherTests.cs
@SimonCropp
SimonCropp merged commit 386b16e into main Aug 22, 2026
8 checks passed
@SimonCropp
SimonCropp deleted the fix-patcher-mixed-eol-anchor branch August 22, 2026 01:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant