formatAnchoredContext function
Numbered LINE:TEXT rows around anchorLines (±mismatchContextLines),
*-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;
}