Skip to content

Commit 43b052d

Browse files
committed
refactored doCleanup
1 parent dc3e44f commit 43b052d

1 file changed

Lines changed: 52 additions & 57 deletions

File tree

src/LineDiff.js

Lines changed: 52 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
var SourceDiff = SourceDiff || {};
22

33
SourceDiff.LineDiff = function() {
4-
var added = [];
5-
var deleted = [];
6-
var common = [];
4+
var _added = [];
5+
var _deleted = [];
6+
var _common = [];
77

88
var addCommon = function(leftPosition, rightPosition, length) {
9-
common.unshift({
9+
_common.unshift({
1010
leftPosition: leftPosition,
1111
leftEndPosition: leftPosition + length - 1,
1212
rightPosition: rightPosition,
@@ -15,13 +15,13 @@ SourceDiff.LineDiff = function() {
1515
};
1616

1717
var addDelete = function(position, length) {
18-
deleted.unshift({
18+
_deleted.unshift({
1919
position: position,
2020
endPosition: position + length - 1});
2121
};
2222

2323
var addInsert = function(position, length) {
24-
added.unshift({
24+
_added.unshift({
2525
position: position,
2626
endPosition: position + length - 1});
2727
};
@@ -38,66 +38,61 @@ SourceDiff.LineDiff = function() {
3838
};
3939

4040
var cleanUp = function() {
41-
mergeAdjacent(added);
42-
mergeAdjacent(deleted);
43-
44-
for (var i = 0; i < common.length; i++) {
45-
if (i + 1 < common.length
46-
&& common[i].leftEndPosition + 1 === common[i + 1].leftPosition
47-
&& common[i].rightEndPosition + 1 === common[i + 1].rightPosition) {
48-
common[i].leftEndPosition = common[i + 1].leftEndPosition;
49-
common[i].rightEndPosition = common[i + 1].rightEndPosition;
50-
common.splice(i + 1, 1);
51-
i--;
52-
}
53-
}
41+
mergeAdjacent(_added);
42+
mergeAdjacent(_deleted);
43+
mergeAdjacentCommon();
5444

55-
var cont = true;
56-
while (cont) {
57-
cont = false;
58-
for (var i = 0; i < common.length; i++) {
59-
var equalityLength = commonLength(common[i]);
45+
do {
46+
var merged = false;
47+
for (var i = 0; i < _common.length; i++) {
48+
var equalityLength = commonLength(_common[i]);
6049

61-
var leftDelete = findEditWithEndingPosition(deleted, common[i].leftPosition - 1);
62-
var rightDelete = findEditWithPosition(deleted, common[i].leftEndPosition + 1);
50+
var leftDelete = findEditWithEndingPosition(_deleted, _common[i].leftPosition - 1);
51+
var rightDelete = findEditWithPosition(_deleted, _common[i].leftEndPosition + 1);
6352

64-
var leftAdd = findEditWithEndingPosition(added, common[i].rightPosition - 1);
65-
var rightAdd = findEditWithPosition(added, common[i].rightEndPosition + 1);
53+
var leftAdd = findEditWithEndingPosition(_added, _common[i].rightPosition - 1);
54+
var rightAdd = findEditWithPosition(_added, _common[i].rightEndPosition + 1);
6655
if (editLength(leftDelete) + editLength(leftAdd) >= equalityLength
6756
&& editLength(rightDelete) + editLength(rightAdd) >= equalityLength) {
68-
cont = true;
69-
if (leftDelete) {
70-
if (rightDelete) {
71-
leftDelete.endPosition = rightDelete.endPosition;
72-
removeEdit(deleted, rightDelete);
73-
} else {
74-
leftDelete.endPosition = common[i].leftEndPosition;
75-
}
57+
merged = true;
58+
if (leftDelete && rightDelete) {
59+
leftDelete.endPosition = rightDelete.endPosition;
60+
removeEdit(_deleted, rightDelete);
61+
} else if(leftDelete) {
62+
leftDelete.endPosition = _common[i].leftEndPosition;
63+
} else if (rightDelete) {
64+
rightDelete.position = _common[i].leftPosition;
7665
} else {
77-
if (rightDelete) {
78-
rightDelete.position = common[i].leftPosition;
79-
} else {
80-
addEdit(deleted, common[i].leftPosition, common[i].leftEndPosition);
81-
}
66+
addEdit(_deleted, _common[i].leftPosition, _common[i].leftEndPosition);
8267
}
83-
if (leftAdd) {
84-
if (rightAdd) {
85-
leftAdd.endPosition = rightAdd.endPosition;
86-
removeEdit(added, rightAdd);
87-
} else {
88-
leftAdd.endPosition = common[i].rightEndPosition;
89-
}
68+
69+
if (leftAdd && rightAdd) {
70+
leftAdd.endPosition = rightAdd.endPosition;
71+
removeEdit(_added, rightAdd);
72+
} else if (leftAdd) {
73+
leftAdd.endPosition = _common[i].rightEndPosition;
74+
} else if (rightAdd) {
75+
rightAdd.position = _common[i].rightPosition;
9076
} else {
91-
if (rightAdd) {
92-
rightAdd.position = common[i].rightPosition;
93-
} else {
94-
addEdit(added, common[i].rightPosition, common[i].rightEndPosition);
95-
}
77+
addEdit(_added, _common[i].rightPosition, _common[i].rightEndPosition);
9678
}
9779

98-
common.splice(i, 1);
80+
_common.splice(i, 1);
9981
}
10082
}
83+
} while (merged)
84+
};
85+
86+
var mergeAdjacentCommon = function () {
87+
for (var i = 0; i < _common.length; i++) {
88+
if (i + 1 < _common.length
89+
&& _common[i].leftEndPosition + 1 === _common[i + 1].leftPosition
90+
&& _common[i].rightEndPosition + 1 === _common[i + 1].rightPosition) {
91+
_common[i].leftEndPosition = _common[i + 1].leftEndPosition;
92+
_common[i].rightEndPosition = _common[i + 1].rightEndPosition;
93+
_common.splice(i + 1, 1);
94+
i--;
95+
}
10196
}
10297
};
10398

@@ -159,8 +154,8 @@ SourceDiff.LineDiff = function() {
159154
addInsert: addInsert,
160155
addCommon: addCommon,
161156
cleanUp: cleanUp,
162-
added: added,
163-
deleted: deleted,
164-
common: common
157+
added: _added,
158+
deleted: _deleted,
159+
common: _common
165160
};
166161
};

0 commit comments

Comments
 (0)