merge method
Merge adjacent blocks that are within gapThreshold context lines.
Implementation
SemanticDiff merge({int gapThreshold = 3}) {
if (blocks.length <= 1) return this;
final merged = <ChangeBlock>[blocks.first];
for (var i = 1; i < blocks.length; i++) {
final prev = merged.last;
final curr = blocks[i];
final gap = curr.startLine - prev.endLine;
if (gap <= gapThreshold) {
merged[merged.length - 1] = ChangeBlock(
lines: [...prev.lines, ...curr.lines],
);
} else {
merged.add(curr);
}
}
return SemanticDiff(blocks: merged);
}