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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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},
|
||||
|
||||
Reference in New Issue
Block a user