formatAnchoredContext function

List<String> formatAnchoredContext(
  1. List<int> anchorLines,
  2. List<String> fileLines
)

Numbered LINE:TEXT rows around anchorLinesmismatchContextLines), *-marking anchors, ... between non-adjacent runs. Out-of-range anchors contribute no rows.

Implementation

List<String> formatAnchoredContext(
  List<int> anchorLines,
  List<String> fileLines,
) {
  final displayLines = <int>{};
  for (final line in anchorLines) {
    if (line < 1 || line > fileLines.length) continue;
    final lo = line - mismatchContextLines < 1
        ? 1
        : line - mismatchContextLines;
    final hi = line + mismatchContextLines > fileLines.length
        ? fileLines.length
        : line + mismatchContextLines;
    for (var lineNum = lo; lineNum <= hi; lineNum++) {
      displayLines.add(lineNum);
    }
  }
  final anchorSet = anchorLines.toSet();
  final rows = <String>[];
  var previous = -1;
  final sorted = displayLines.toList()..sort();
  for (final lineNum in sorted) {
    if (previous != -1 && lineNum > previous + 1) rows.add('...');
    previous = lineNum;
    final marker = anchorSet.contains(lineNum) ? '*' : ' ';
    rows.add('$marker${formatNumberedLine(lineNum, fileLines[lineNum - 1])}');
  }
  return rows;
}