diffStats function
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,
);
}