diffStats function

DiffStats diffStats(
  1. String oldText,
  2. String newText
)

Compute DiffStats between oldText and newText.

Implementation

DiffStats diffStats(String oldText, String newText) {
  final diffs = computeLineDiff(oldText, newText);
  var additions = 0, deletions = 0, unchanged = 0;
  final modifications = <int>[];

  // Group adjacent removes+adds as modifications
  var i = 0;
  while (i < diffs.length) {
    if (diffs[i].type == DiffType.context) {
      unchanged++;
      i++;
    } else if (diffs[i].type == DiffType.remove) {
      var removes = 0;
      while (i < diffs.length && diffs[i].type == DiffType.remove) {
        removes++;
        i++;
      }
      var adds = 0;
      while (i < diffs.length && diffs[i].type == DiffType.add) {
        adds++;
        i++;
      }
      if (adds > 0 && removes > 0) {
        final mods = math.min(adds, removes);
        modifications.add(mods);
        additions += adds - mods;
        deletions += removes - mods;
      } else {
        deletions += removes;
        additions += adds;
      }
    } else {
      additions++;
      i++;
    }
  }

  return DiffStats(
    additions: additions,
    deletions: deletions,
    modifications: modifications.fold(0, (a, b) => a + b),
    unchanged: unchanged,
  );
}