sync method

TextSyntaxSnapshot<State> sync(
  1. String text, {
  2. String? language,
  3. bool force = false,
  4. TextDocumentChange? change,
})

Implementation

TextSyntaxSnapshot<State> sync(
  String text, {
  String? language,
  bool force = false,
  TextDocumentChange? change,
}) {
  final resolvedLanguage = language ?? this.language;
  final previous = _snapshot;
  if (!force &&
      previous != null &&
      previous.text == text &&
      previous.language == resolvedLanguage &&
      (change == null || change.isNoop)) {
    return previous;
  }

  final resolvedChange =
      !force && previous != null && previous.language == resolvedLanguage
      ? (change ?? computeTextDocumentChange(previous.text, text))
      : null;
  final result = provider.build(
    text,
    document: null,
    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>(
    text: text,
    decorations: List<TextDecorationRange>.unmodifiable(decorations),
    language: resolvedLanguage,
    document: null,
    state: result.state,
    change: resolvedChange,
  );
  _snapshot = snapshot;
  return snapshot;
}