Stop treating stuff like vertical tabs as line breaks when dealing with unified diffs #435
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
diff
andpatch
CLI 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 filesfoo
andbar
contained a\v
or 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
lines
in the hunk is too short as a result of the parser choking on the\v
character - all the lines after the\v
have simply disappeared from our hunk!