Stop treating stuff like vertical tabs as line breaks when dealing with unified diffs#435
Merged
ExplodingCabbage merged 5 commits into6.0.0-stagingfrom Dec 27, 2023
Conversation
44d0170 to
51c1645
Compare
51c1645 to
0e5bed8
Compare
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.
Tools like the Unix
diffandpatchCLI tools treat\v,\f, etc as just ordinary characters, but jsdiff currently treats them as line breaks. That creates an unfortunate incompatibility: if you generate a unified diff format diff withdiff -u foo bar, and some of the lines in filesfooandbarcontained a\vor whatever, then jsdiff will parse the patch wrongly.To see the problem, checkout the first commit on this PR (where I've added the test but not yet fixed jsdiff's behaviour to make the test pass) and run
yarn test. You'll get this failure:Notice that it's not just the line delimiters that are wrong, but that the actual array of
linesin the hunk is too short as a result of the parser choking on the\vcharacter - all the lines after the\vhave simply disappeared from our hunk!