Fix line returns segments being one character too long on Windows #1043
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.
Changes
Previously, due to how we skipped over CRLF, we'd end up with a mapping that looks like this:
Where the first segment would contain both the last character of the line, and the
\r
. This is fine, albeit wonky, however this ends up breaking downstream in libraries that are line-ending agnostic because they don't expect than an offset would end up after a line ending, even less so in the middle of a two-characters one. (the main culprit here is https://github.com/microsoft/vscode-languageserver-node/tree/main/textDocument, see microsoft/vscode-languageserver-node#1285)This PR fixes this by handling it like this instead:
That way, asking for the last segment of a line will instead result on the
;
, or before the two line endings, depending on which one you ask for, but nothing after or in the middle of it.Testing
Added a test
Docs
N/A