syncDocument method
TextSyntaxSnapshot<State>
syncDocument(
- TextDocument document, {
- String? language,
- bool force = false,
- TextDocumentChange? change,
Implementation
TextSyntaxSnapshot<State> syncDocument(
TextDocument document, {
String? language,
bool force = false,
TextDocumentChange? change,
}) {
final resolvedLanguage = language ?? this.language;
final previous = _snapshot;
if (!force &&
previous != null &&
previous.language == resolvedLanguage &&
previous.document != null &&
previous.document!.storageIdentity == document.storageIdentity &&
previous.document!.revision == document.revision &&
(change == null || change.isNoop)) {
return previous;
}
final resolvedChange =
!force && previous != null && previous.language == resolvedLanguage
? change ??
(previous.document != null
? computeTextDocumentChangeForDocuments(
previousDocument: previous.document!,
nextDocument: document,
)
: computeTextDocumentChange(
previous.text,
document.textBetweenLines(
startLine: 0,
endLine: document.lineCount,
),
))
: null;
final result = provider.buildDocument(
document,
language: resolvedLanguage,
previous: resolvedChange == null ? null : previous,
change: resolvedChange,
);
final decorations = result.patch != null && previous != null
? mergeTextSyntaxDecorationPatch(previous.decorations, result.patch!)
: result.decorations;
final snapshot = TextSyntaxSnapshot<State>(
decorations: List<TextDecorationRange>.unmodifiable(decorations),
language: resolvedLanguage,
document: document.copy(),
state: result.state,
change: resolvedChange,
);
_snapshot = snapshot;
return snapshot;
}