getCachedLineSpan method

TextSpan? getCachedLineSpan(
  1. int lineIndex,
  2. String lineText
)

Obtains a cached span only. Unlike getLineSpan, this never invokes re_highlight, so it is safe to call from a render object's paint pass.

Implementation

TextSpan? getCachedLineSpan(int lineIndex, String lineText) {
  final mergedCache = _mergedCache[lineIndex];
  if (mergedCache != null &&
      mergedCache.version == _version &&
      mergedCache.text == lineText) {
    return mergedCache.span;
  }

  final grammarCache = _grammarCache[lineIndex];
  final hasGrammar =
      grammarCache != null &&
      grammarCache.version == _version &&
      grammarCache.text == lineText;
  final semanticSpans = _lineSemanticSpans[lineIndex];
  if (hasGrammar) {
    if (_isEditing || semanticSpans == null || semanticSpans.isEmpty) {
      return grammarCache.span;
    }
    final mergedSpan = _mergeGrammarAndSemantic(
      lineText,
      grammarCache.span,
      semanticSpans,
    );
    _lineSpanCache[lineText] = mergedSpan;
    _mergedCache[lineIndex] = HighlightedLine(lineText, mergedSpan, _version);
    return mergedSpan;
  }

  return null;
}