Expand description

Prefer contiguous novel nodes on the same line.

A slider takes the following form:

Old:

A B
C D

New:

A B
A B
C D

It would be correct, but ugly, to show the following diff:

A +B+
+A+ B
C D

This module fixes these cases. It identifies situations where we can change which item is marked as novel (e.g. either B in the example above) whilst still showing a valid, minimal diff.

Functions

Return the distance between two syntax nodes, as a tuple of number of lines and number of columns.
Correct sliders in middle insertions.
When we see code of the form old1(novel(old2())), prefer treating the inner delimiter as novel, so novel(...) in this example.
When we see code of the form (old-1 (novel (old-2))), prefer treating the outer delimiter as novel, so (novel ...) in this example.
For every sequence of novel nodes, if it’s a potential slider, change which nodes are marked as novel if it produces a sequence of nodes that are closer together.
Return the start and end indexes of sequences of novel nodes that occur after unchanged nodes.
Return the start and end indexes of sequences of novel nodes that occur before unchanged nodes.
Should nester slider correction prefer the inner or outer delimiter?
Given a nested list where the root delimiters are novel but the inner list’s delimiters are unchanged, mark the root list as unchanged instead.
Given a nested list where the root delimiters are unchanged but the inner list’s delimiters are novel, mark the inner list as unchanged instead.
If the next node is unchanged, matches the beginning of the region, and has a smaller text distance, mark it as novel.
If the previous node is unchanged, matches the end of the region, and has a smaller text distance, mark it as novel.
Find the unchanged descendants of nodes.
Nested sliders require a single unchanged descendant whose delimiters we can slide.