Add line range information to group objects

Group objects now keep track of the range of line numbers for the lines
they contain, making specific groups easier to identify.

Change-Id: I37873d83e1003d75df7da77e619e23208d1c30b3
This commit is contained in:
Wyatt Allen
2016-06-30 16:59:53 -07:00
parent 994a5bc91c
commit 7bbc6b49c0
3 changed files with 59 additions and 19 deletions

View File

@@ -91,26 +91,11 @@
}
var groupStartLine = 0;
var groupEndLine = 0;
switch (group.type) {
case GrDiffGroup.Type.BOTH:
if (opt_side === GrDiffBuilder.Side.LEFT) {
groupStartLine = group.lines[0].beforeNumber;
groupEndLine = group.lines[group.lines.length - 1].beforeNumber;
} else if (opt_side === GrDiffBuilder.Side.RIGHT) {
groupStartLine = group.lines[0].afterNumber;
groupEndLine = group.lines[group.lines.length - 1].afterNumber;
}
break;
case GrDiffGroup.Type.DELTA:
if (opt_side === GrDiffBuilder.Side.LEFT && group.removes.length) {
groupStartLine = group.removes[0].beforeNumber;
groupEndLine = group.removes[group.removes.length - 1].beforeNumber;
} else if (group.adds.length) {
groupStartLine = group.adds[0].afterNumber;
groupEndLine = group.adds[group.adds.length - 1].afterNumber;
}
break;
if (opt_side) {
groupStartLine = group.lineRange[opt_side].start;
groupEndLine = group.lineRange[opt_side].end;
}
if (groupStartLine === 0) { // Line was removed or added.
groupStartLine = groupEndLine;
}

View File

@@ -23,6 +23,11 @@
this.adds = [];
this.removes = [];
this.lineRange = {
left: {start: null, end: null},
right: {start: null, end: null},
};
if (opt_lines) {
opt_lines.forEach(this.addLine, this);
}
@@ -51,6 +56,7 @@
} else if (line.type === GrDiffLine.Type.REMOVE) {
this.removes.push(line);
}
this._updateRange(line);
};
GrDiffGroup.prototype.getSideBySidePairs = function() {
@@ -78,5 +84,33 @@
return pairs;
};
GrDiffGroup.prototype._updateRange = function(line) {
if (line.beforeNumber === 'FILE' || line.afterNumber === 'FILE') { return; }
if (line.type === GrDiffLine.Type.ADD ||
line.type === GrDiffLine.Type.BOTH) {
if (this.lineRange.right.start === null ||
line.afterNumber < this.lineRange.right.start) {
this.lineRange.right.start = line.afterNumber;
}
if (this.lineRange.right.end === null ||
line.afterNumber > this.lineRange.right.end) {
this.lineRange.right.end = line.afterNumber;
}
}
if (line.type === GrDiffLine.Type.REMOVE ||
line.type === GrDiffLine.Type.BOTH) {
if (this.lineRange.left.start === null ||
line.beforeNumber < this.lineRange.left.start) {
this.lineRange.left.start = line.beforeNumber;
}
if (this.lineRange.left.end === null ||
line.beforeNumber > this.lineRange.left.end) {
this.lineRange.left.end = line.beforeNumber;
}
}
};
window.GrDiffGroup = GrDiffGroup;
})(window, GrDiffLine);

View File

@@ -30,12 +30,19 @@ limitations under the License.
var l1 = new GrDiffLine(GrDiffLine.Type.ADD);
var l2 = new GrDiffLine(GrDiffLine.Type.ADD);
var l3 = new GrDiffLine(GrDiffLine.Type.REMOVE);
l1.afterNumber = 128;
l2.afterNumber = 129;
l3.beforeNumber = 64;
group.addLine(l1);
group.addLine(l2);
group.addLine(l3);
assert.deepEqual(group.lines, [l1, l2, l3]);
assert.deepEqual(group.adds, [l1, l2]);
assert.deepEqual(group.removes, [l3]);
assert.deepEqual(group.lineRange, {
left: {start: 64, end: 64},
right: {start: 128, end: 129},
});
var pairs = group.getSideBySidePairs();
assert.deepEqual(pairs, [
@@ -57,14 +64,28 @@ limitations under the License.
test('group/header line pairs', function() {
var l1 = new GrDiffLine(GrDiffLine.Type.BOTH);
l1.beforeNumber = 64;
l1.afterNumber = 128;
var l2 = new GrDiffLine(GrDiffLine.Type.BOTH);
l2.beforeNumber = 65;
l2.afterNumber = 129;
var l3 = new GrDiffLine(GrDiffLine.Type.BOTH);
l3.beforeNumber = 66;
l3.afterNumber = 130;
var group = new GrDiffGroup(GrDiffGroup.Type.BOTH, [l1, l2, l3]);
assert.deepEqual(group.lines, [l1, l2, l3]);
assert.deepEqual(group.adds, []);
assert.deepEqual(group.removes, []);
assert.deepEqual(group.lineRange, {
left: {start: 64, end: 66},
right: {start: 128, end: 130},
});
var pairs = group.getSideBySidePairs();
assert.deepEqual(pairs, [
{left: l1, right: l1},