What one line of a diff is: added, removed, or neither.
The other half of decision 19d7602d. A diff is a table of lines and the
only thing the vocabulary was missing was a way for a line to say which side
of the change it is on, so this rides on [Cells] rather than arriving as a
Node::Diff carrying git’s data model.
Context is a line that did not change, and it is most of
a diff. Said as Option<Change> with None for context, a renderer could
not tell an unchanged line from a line nobody marked, which is the same
argument Syntax::Plain makes one type up.
#[non_exhaustive] for Syntax’s reason. A fourth kind – a moved line, a
conflict side – is a plausible request and must not be a breaking release.
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.