Display outer element and trailing newline consistently in jest-diff #4520
+100
−7
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
Problem 1: outer element
For example, if component changes to render a sibling element, it also returns an outer element in React 15 and earlier.
formatHunks
function makes sure that strings end with newline. Therefore, it displays an inserted (or deleted) outer element clearly:formatChunks
function doesn’t. Therefore it displays the</h1>
end tag of the original outer element unclearly as a pair of deleted and inserted lines:Problem 2: presence or absence of trailing newline
A multiline string not enclosed in quotes is hypothetical result from a plugin instead of default result from
pretty-format
package. It might become more important after #4183formatHunks
function makes sure that strings end with newline. Therefore, it displays unclearly:formatChunks
function doesn’t. Because it ignores trailing newlines at end of diffs, it displays even more unclearly:Correct and clear result for deleted (or inserted) newline:
line 1 line 2 line 3 -
Solution
Because
formatHunks
andformatChunks
ignore one trailing newline always append newline to strings.You would laugh at how much code I thought to write, before I saw that less is more :)
Test plan
Add tests to specify intended result and prevent regression: