Previously we were treating the local `NullGrammar` differently from
`atom.grammars.nullGrammar`. These two grammars are conceptually the
same, as the former was created to support editors creation without a
grammar registry.
To keep backwards-compatibility, we also build placeholder lines
on-demand when calling `TokenizedBuffer.prototype.tokenizedLineForRow`.
This ensure that packages relying on the internals of `TokenizedBuffer`
to retrieve syntactic boundaries won't break when the null grammar is
used or large file mode is on.
This commit moves all the remaining concerns not related to decorations
out of `DisplayBuffer` and into `TextEditor`. This means the
`DisplayBuffer` is now free to be renamed to `DecorationManager`.
When emitting the `did-change` event, `updateFoldableStatus` used to extend the
change region up and down to include all the lines that changed their
foldability status because of a buffer change. I assume this was supposed to
invalidate folds that *contained* the change whenever a line was edited in a way
that affected also the previous or subsequent ones.
That information, however, is not being used by `DisplayBuffer`, which does not
alter existing folded regions when they become invalid.
I believe the correct behavior should be to unfold the invalid region and
recompute those screen lines. Nonetheless, it seems reasonable to me to keep the
original (wrong) behavior and not address it in this branch, because it strays
from the original intent of this refactoring.
We should probably fix it once for all in another PR or when
integrating/implementing `DisplayLayer`.
I switched to first-mate Selector because I didn’t want to replicate
the poorly-defined Token::matchesScopeSelector method now that tokens
are not stored on lines. However, the first-mate semantics are stricter
and that broke the API. Perhaps using selector-kit here would be better,
but I just wanted to put back exactly to how it was for now.
/cc @ypresto