expandPlaceholderRanges function

String expandPlaceholderRanges(
  1. String text,
  2. List<TrackedPlaceholderRange> ranges
)

Splices each range's TrackedPlaceholderRange.fullText into text.

Ranges apply descending by start offset so earlier offsets stay valid. Ranges that are empty, out of order overlap, or out of bounds are skipped.

Implementation

String expandPlaceholderRanges(
  String text,
  List<TrackedPlaceholderRange> ranges,
) {
  final ordered = ranges.toList(growable: false)
    ..sort((a, b) => b.startOffset.compareTo(a.startOffset));
  var result = text;
  var floor = TextDocument(text: result).length + 1;
  for (final range in ordered) {
    final start = range.startOffset;
    final end = range.endOffset;
    final document = TextDocument(text: result);
    if (start < 0 || end < start || end > document.length || end > floor) {
      continue;
    }
    final graphemes = document.graphemesInRange(
      startOffset: 0,
      endOffset: document.length,
    );
    // Guard against placeholder/display drift: only expand when the
    // display text matches what the range claims.
    if (graphemes.sublist(start, end).join() != range.displayText) {
      continue;
    }
    result = [
      ...graphemes.take(start),
      range.fullText,
      ...graphemes.skip(end),
    ].join();
    floor = start;
  }
  return result;
}