syncDocument method

TextSyntaxSnapshot<State> syncDocument(
  1. TextDocument document, {
  2. String? language,
  3. bool force = false,
  4. 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;
}