merge method

SemanticDiff merge({
  1. int gapThreshold = 3,
})

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);
}