Skip to content

Commit 12e5b2f

Browse files
committed
💄
1 parent 44811c0 commit 12e5b2f

1 file changed

Lines changed: 54 additions & 58 deletions

File tree

src/vs/base/common/diff/diff.ts

Lines changed: 54 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,9 @@ export class MyArray {
112112
// Our total memory usage for storing history is (worst-case):
113113
// 2 * [(MaxDifferencesHistory + 1) * (MaxDifferencesHistory + 1) - 1] * sizeof(int)
114114
// 2 * [1448*1448 - 1] * 4 = 16773624 = 16MB
115-
let MaxDifferencesHistory = 1447;
116-
//let MaxDifferencesHistory = 100;
117-
118-
119-
115+
const enum LocalConstants {
116+
MaxDifferencesHistory = 1447
117+
}
120118

121119
/**
122120
* A utility class which helps to create the set of DiffChanges from
@@ -309,8 +307,8 @@ export class LcsDiff {
309307
* @returns An array of the differences between the two input sequences.
310308
*/
311309
private _ComputeDiff(originalStart: number, originalEnd: number, modifiedStart: number, modifiedEnd: number, pretty: boolean): DiffChange[] {
312-
let quitEarlyArr = [false];
313-
let changes = this.ComputeDiffRecursive(originalStart, originalEnd, modifiedStart, modifiedEnd, quitEarlyArr);
310+
const quitEarlyArr = [false];
311+
const changes = this.ComputeDiffRecursive(originalStart, originalEnd, modifiedStart, modifiedEnd, quitEarlyArr);
314312

315313
if (pretty) {
316314
// We have to clean up the computed diff to be more intuitive
@@ -372,11 +370,12 @@ export class LcsDiff {
372370
}
373371

374372
// This problem can be solved using the Divide-And-Conquer technique.
375-
let midOriginalArr = [0], midModifiedArr = [0];
376-
let result = this.ComputeRecursionPoint(originalStart, originalEnd, modifiedStart, modifiedEnd, midOriginalArr, midModifiedArr, quitEarlyArr);
373+
const midOriginalArr = [0];
374+
const midModifiedArr = [0];
375+
const result = this.ComputeRecursionPoint(originalStart, originalEnd, modifiedStart, modifiedEnd, midOriginalArr, midModifiedArr, quitEarlyArr);
377376

378-
let midOriginal = midOriginalArr[0];
379-
let midModified = midModifiedArr[0];
377+
const midOriginal = midOriginalArr[0];
378+
const midModified = midModifiedArr[0];
380379

381380
if (result !== null) {
382381
// Result is not-null when there was enough memory to compute the changes while
@@ -388,7 +387,7 @@ export class LcsDiff {
388387
// Second Half: (midOriginal + 1, minModified + 1) to (originalEnd, modifiedEnd)
389388
// NOTE: ComputeDiff() is inclusive, therefore the second range starts on the next point
390389

391-
let leftChanges = this.ComputeDiffRecursive(originalStart, midOriginal, modifiedStart, midModified, quitEarlyArr);
390+
const leftChanges = this.ComputeDiffRecursive(originalStart, midOriginal, modifiedStart, midModified, quitEarlyArr);
392391
let rightChanges: DiffChange[] = [];
393392

394393
if (!quitEarlyArr[0]) {
@@ -415,8 +414,10 @@ export class LcsDiff {
415414
forwardPoints: Int32Array, reversePoints: Int32Array,
416415
originalIndex: number, originalEnd: number, midOriginalArr: number[],
417416
modifiedIndex: number, modifiedEnd: number, midModifiedArr: number[],
418-
deltaIsEven: boolean, quitEarlyArr: boolean[]): DiffChange[] {
419-
let forwardChanges: DiffChange[] | null = null, reverseChanges: DiffChange[] | null = null;
417+
deltaIsEven: boolean, quitEarlyArr: boolean[]
418+
): DiffChange[] {
419+
let forwardChanges: DiffChange[] | null = null;
420+
let reverseChanges: DiffChange[] | null = null;
420421

421422
// First, walk backward through the forward diagonals history
422423
let changeHelper = new DiffChangeHelper();
@@ -425,11 +426,10 @@ export class LcsDiff {
425426
let diagonalRelative = (midOriginalArr[0] - midModifiedArr[0]) - diagonalForwardOffset;
426427
let lastOriginalIndex = Constants.MIN_SAFE_SMALL_INTEGER;
427428
let historyIndex = this.m_forwardHistory.length - 1;
428-
let diagonal: number;
429429

430430
do {
431431
// Get the diagonal index from the relative diagonal number
432-
diagonal = diagonalRelative + diagonalForwardBase;
432+
const diagonal = diagonalRelative + diagonalForwardBase;
433433

434434
// Figure out where we came from
435435
if (diagonal === diagonalMin || (diagonal < diagonalMax && forwardPoints[diagonal - 1] < forwardPoints[diagonal + 1])) {
@@ -474,7 +474,7 @@ export class LcsDiff {
474474
let modifiedStartPoint = midModifiedArr[0] + 1;
475475

476476
if (forwardChanges !== null && forwardChanges.length > 0) {
477-
let lastForwardChange = forwardChanges[forwardChanges.length - 1];
477+
const lastForwardChange = forwardChanges[forwardChanges.length - 1];
478478
originalStartPoint = Math.max(originalStartPoint, lastForwardChange.getOriginalEnd());
479479
modifiedStartPoint = Math.max(modifiedStartPoint, lastForwardChange.getModifiedEnd());
480480
}
@@ -494,7 +494,7 @@ export class LcsDiff {
494494

495495
do {
496496
// Get the diagonal index from the relative diagonal number
497-
diagonal = diagonalRelative + diagonalReverseBase;
497+
const diagonal = diagonalRelative + diagonalReverseBase;
498498

499499
// Figure out where we came from
500500
if (diagonal === diagonalMin || (diagonal < diagonalMax && reversePoints[diagonal - 1] >= reversePoints[diagonal + 1])) {
@@ -555,7 +555,6 @@ export class LcsDiff {
555555
let originalIndex = 0, modifiedIndex = 0;
556556
let diagonalForwardStart = 0, diagonalForwardEnd = 0;
557557
let diagonalReverseStart = 0, diagonalReverseEnd = 0;
558-
let numDifferences: number;
559558

560559
// To traverse the edit graph and produce the proper LCS, our actual
561560
// start position is just outside the given boundary
@@ -575,26 +574,26 @@ export class LcsDiff {
575574
// The integer value in the cell represents the originalIndex of the furthest
576575
// reaching point found so far that ends in that diagonal.
577576
// The modifiedIndex can be computed mathematically from the originalIndex and the diagonal number.
578-
let maxDifferences = (originalEnd - originalStart) + (modifiedEnd - modifiedStart);
579-
let numDiagonals = maxDifferences + 1;
580-
let forwardPoints = new Int32Array(numDiagonals);
581-
let reversePoints = new Int32Array(numDiagonals);
577+
const maxDifferences = (originalEnd - originalStart) + (modifiedEnd - modifiedStart);
578+
const numDiagonals = maxDifferences + 1;
579+
const forwardPoints = new Int32Array(numDiagonals);
580+
const reversePoints = new Int32Array(numDiagonals);
582581
// diagonalForwardBase: Index into forwardPoints of the diagonal which passes through (originalStart, modifiedStart)
583582
// diagonalReverseBase: Index into reversePoints of the diagonal which passes through (originalEnd, modifiedEnd)
584-
let diagonalForwardBase = (modifiedEnd - modifiedStart);
585-
let diagonalReverseBase = (originalEnd - originalStart);
583+
const diagonalForwardBase = (modifiedEnd - modifiedStart);
584+
const diagonalReverseBase = (originalEnd - originalStart);
586585
// diagonalForwardOffset: Geometric offset which allows modifiedIndex to be computed from originalIndex and the
587586
// diagonal number (relative to diagonalForwardBase)
588587
// diagonalReverseOffset: Geometric offset which allows modifiedIndex to be computed from originalIndex and the
589588
// diagonal number (relative to diagonalReverseBase)
590-
let diagonalForwardOffset = (originalStart - modifiedStart);
591-
let diagonalReverseOffset = (originalEnd - modifiedEnd);
589+
const diagonalForwardOffset = (originalStart - modifiedStart);
590+
const diagonalReverseOffset = (originalEnd - modifiedEnd);
592591

593592
// delta: The difference between the end diagonal and the start diagonal. This is used to relate diagonal numbers
594593
// relative to the start diagonal with diagonal numbers relative to the end diagonal.
595594
// The Even/Oddn-ness of this delta is important for determining when we should check for overlap
596-
let delta = diagonalReverseBase - diagonalForwardBase;
597-
let deltaIsEven = (delta % 2 === 0);
595+
const delta = diagonalReverseBase - diagonalForwardBase;
596+
const deltaIsEven = (delta % 2 === 0);
598597

599598
// Here we set up the start and end points as the furthest points found so far
600599
// in both the forward and reverse directions, respectively
@@ -613,15 +612,14 @@ export class LcsDiff {
613612
// away from the reference diagonal (which is diagonalForwardBase for forward, diagonalReverseBase for reverse).
614613
// --We extend on even diagonals (relative to the reference diagonal) only when numDifferences
615614
// is even and odd diagonals only when numDifferences is odd.
616-
let diagonal: number, tempOriginalIndex: number;
617-
for (numDifferences = 1; numDifferences <= (maxDifferences / 2) + 1; numDifferences++) {
615+
for (let numDifferences = 1; numDifferences <= (maxDifferences / 2) + 1; numDifferences++) {
618616
let furthestOriginalIndex = 0;
619617
let furthestModifiedIndex = 0;
620618

621619
// Run the algorithm in the forward direction
622620
diagonalForwardStart = this.ClipDiagonalBound(diagonalForwardBase - numDifferences, numDifferences, diagonalForwardBase, numDiagonals);
623621
diagonalForwardEnd = this.ClipDiagonalBound(diagonalForwardBase + numDifferences, numDifferences, diagonalForwardBase, numDiagonals);
624-
for (diagonal = diagonalForwardStart; diagonal <= diagonalForwardEnd; diagonal += 2) {
622+
for (let diagonal = diagonalForwardStart; diagonal <= diagonalForwardEnd; diagonal += 2) {
625623
// STEP 1: We extend the furthest reaching point in the present diagonal
626624
// by looking at the diagonals above and below and picking the one whose point
627625
// is further away from the start point (originalStart, modifiedStart)
@@ -633,7 +631,7 @@ export class LcsDiff {
633631
modifiedIndex = originalIndex - (diagonal - diagonalForwardBase) - diagonalForwardOffset;
634632

635633
// Save the current originalIndex so we can test for false overlap in step 3
636-
tempOriginalIndex = originalIndex;
634+
const tempOriginalIndex = originalIndex;
637635

638636
// STEP 2: We can continue to extend the furthest reaching point in the present diagonal
639637
// so long as the elements are equal.
@@ -657,7 +655,7 @@ export class LcsDiff {
657655
midOriginalArr[0] = originalIndex;
658656
midModifiedArr[0] = modifiedIndex;
659657

660-
if (tempOriginalIndex <= reversePoints[diagonal] && MaxDifferencesHistory > 0 && numDifferences <= (MaxDifferencesHistory + 1)) {
658+
if (tempOriginalIndex <= reversePoints[diagonal] && LocalConstants.MaxDifferencesHistory > 0 && numDifferences <= (LocalConstants.MaxDifferencesHistory + 1)) {
661659
// BINGO! We overlapped, and we have the full trace in memory!
662660
return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset,
663661
diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset,
@@ -676,7 +674,7 @@ export class LcsDiff {
676674
}
677675

678676
// Check to see if we should be quitting early, before moving on to the next iteration.
679-
let matchLengthOfLongest = ((furthestOriginalIndex - originalStart) + (furthestModifiedIndex - modifiedStart) - numDifferences) / 2;
677+
const matchLengthOfLongest = ((furthestOriginalIndex - originalStart) + (furthestModifiedIndex - modifiedStart) - numDifferences) / 2;
680678

681679
if (this.ContinueProcessingPredicate !== null && !this.ContinueProcessingPredicate(furthestOriginalIndex, matchLengthOfLongest)) {
682680
// We can't finish, so skip ahead to generating a result from what we have.
@@ -686,7 +684,7 @@ export class LcsDiff {
686684
midOriginalArr[0] = furthestOriginalIndex;
687685
midModifiedArr[0] = furthestModifiedIndex;
688686

689-
if (matchLengthOfLongest > 0 && MaxDifferencesHistory > 0 && numDifferences <= (MaxDifferencesHistory + 1)) {
687+
if (matchLengthOfLongest > 0 && LocalConstants.MaxDifferencesHistory > 0 && numDifferences <= (LocalConstants.MaxDifferencesHistory + 1)) {
690688
// Enough of the history is in memory to walk it backwards
691689
return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset,
692690
diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset,
@@ -713,7 +711,7 @@ export class LcsDiff {
713711
// Run the algorithm in the reverse direction
714712
diagonalReverseStart = this.ClipDiagonalBound(diagonalReverseBase - numDifferences, numDifferences, diagonalReverseBase, numDiagonals);
715713
diagonalReverseEnd = this.ClipDiagonalBound(diagonalReverseBase + numDifferences, numDifferences, diagonalReverseBase, numDiagonals);
716-
for (diagonal = diagonalReverseStart; diagonal <= diagonalReverseEnd; diagonal += 2) {
714+
for (let diagonal = diagonalReverseStart; diagonal <= diagonalReverseEnd; diagonal += 2) {
717715
// STEP 1: We extend the furthest reaching point in the present diagonal
718716
// by looking at the diagonals above and below and picking the one whose point
719717
// is further away from the start point (originalEnd, modifiedEnd)
@@ -725,7 +723,7 @@ export class LcsDiff {
725723
modifiedIndex = originalIndex - (diagonal - diagonalReverseBase) - diagonalReverseOffset;
726724

727725
// Save the current originalIndex so we can test for false overlap
728-
tempOriginalIndex = originalIndex;
726+
const tempOriginalIndex = originalIndex;
729727

730728
// STEP 2: We can continue to extend the furthest reaching point in the present diagonal
731729
// as long as the elements are equal.
@@ -743,7 +741,7 @@ export class LcsDiff {
743741
midOriginalArr[0] = originalIndex;
744742
midModifiedArr[0] = modifiedIndex;
745743

746-
if (tempOriginalIndex >= forwardPoints[diagonal] && MaxDifferencesHistory > 0 && numDifferences <= (MaxDifferencesHistory + 1)) {
744+
if (tempOriginalIndex >= forwardPoints[diagonal] && LocalConstants.MaxDifferencesHistory > 0 && numDifferences <= (LocalConstants.MaxDifferencesHistory + 1)) {
747745
// BINGO! We overlapped, and we have the full trace in memory!
748746
return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset,
749747
diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset,
@@ -762,7 +760,7 @@ export class LcsDiff {
762760
}
763761

764762
// Save current vectors to history before the next iteration
765-
if (numDifferences <= MaxDifferencesHistory) {
763+
if (numDifferences <= LocalConstants.MaxDifferencesHistory) {
766764
// We are allocating space for one extra int, which we fill with
767765
// the index of the diagonal base index
768766
let temp = new Int32Array(diagonalForwardEnd - diagonalForwardStart + 2);
@@ -778,8 +776,6 @@ export class LcsDiff {
778776

779777
}
780778

781-
782-
783779
// If we got here, then we have the full trace in history. We just have to convert it to a change list
784780
// NOTE: This part is a bit messy
785781
return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset,
@@ -849,8 +845,8 @@ export class LcsDiff {
849845
let bestScore = this._boundaryScore(change.originalStart, change.originalLength, change.modifiedStart, change.modifiedLength);
850846

851847
for (let delta = 1; ; delta++) {
852-
let originalStart = change.originalStart - delta;
853-
let modifiedStart = change.modifiedStart - delta;
848+
const originalStart = change.originalStart - delta;
849+
const modifiedStart = change.modifiedStart - delta;
854850

855851
if (originalStart < originalStop || modifiedStart < modifiedStop) {
856852
break;
@@ -864,7 +860,7 @@ export class LcsDiff {
864860
break;
865861
}
866862

867-
let score = this._boundaryScore(originalStart, change.originalLength, modifiedStart, change.modifiedLength);
863+
const score = this._boundaryScore(originalStart, change.originalLength, modifiedStart, change.modifiedLength);
868864

869865
if (score > bestScore) {
870866
bestScore = score;
@@ -891,7 +887,7 @@ export class LcsDiff {
891887
return true;
892888
}
893889
if (originalLength > 0) {
894-
let originalEnd = originalStart + originalLength;
890+
const originalEnd = originalStart + originalLength;
895891
if (this._OriginalIsBoundary(originalEnd - 1) || this._OriginalIsBoundary(originalEnd)) {
896892
return true;
897893
}
@@ -911,7 +907,7 @@ export class LcsDiff {
911907
return true;
912908
}
913909
if (modifiedLength > 0) {
914-
let modifiedEnd = modifiedStart + modifiedLength;
910+
const modifiedEnd = modifiedStart + modifiedLength;
915911
if (this._ModifiedIsBoundary(modifiedEnd - 1) || this._ModifiedIsBoundary(modifiedEnd)) {
916912
return true;
917913
}
@@ -920,8 +916,8 @@ export class LcsDiff {
920916
}
921917

922918
private _boundaryScore(originalStart: number, originalLength: number, modifiedStart: number, modifiedLength: number): number {
923-
let originalScore = (this._OriginalRegionIsBoundary(originalStart, originalLength) ? 1 : 0);
924-
let modifiedScore = (this._ModifiedRegionIsBoundary(modifiedStart, modifiedLength) ? 1 : 0);
919+
const originalScore = (this._OriginalRegionIsBoundary(originalStart, originalLength) ? 1 : 0);
920+
const modifiedScore = (this._ModifiedRegionIsBoundary(modifiedStart, modifiedLength) ? 1 : 0);
925921
return (originalScore + modifiedScore);
926922
}
927923

@@ -942,14 +938,14 @@ export class LcsDiff {
942938
// might recurse in the middle of a change thereby splitting it into
943939
// two changes. Here in the combining stage, we detect and fuse those
944940
// changes back together
945-
let result = new Array<DiffChange>(left.length + right.length - 1);
941+
const result = new Array<DiffChange>(left.length + right.length - 1);
946942
MyArray.Copy(left, 0, result, 0, left.length - 1);
947943
result[left.length - 1] = mergedChangeArr[0];
948944
MyArray.Copy(right, 1, result, left.length, right.length - 1);
949945

950946
return result;
951947
} else {
952-
let result = new Array<DiffChange>(left.length + right.length);
948+
const result = new Array<DiffChange>(left.length + right.length);
953949
MyArray.Copy(left, 0, result, 0, left.length);
954950
MyArray.Copy(right, 0, result, left.length, right.length);
955951

@@ -970,9 +966,9 @@ export class LcsDiff {
970966
Debug.Assert(left.modifiedStart <= right.modifiedStart, 'Left change is not less than or equal to right change');
971967

972968
if (left.originalStart + left.originalLength >= right.originalStart || left.modifiedStart + left.modifiedLength >= right.modifiedStart) {
973-
let originalStart = left.originalStart;
969+
const originalStart = left.originalStart;
974970
let originalLength = left.originalLength;
975-
let modifiedStart = left.modifiedStart;
971+
const modifiedStart = left.modifiedStart;
976972
let modifiedLength = left.modifiedLength;
977973

978974
if (left.originalStart + left.originalLength >= right.originalStart) {
@@ -1010,15 +1006,15 @@ export class LcsDiff {
10101006

10111007
// diagonalsBelow: The number of diagonals below the reference diagonal
10121008
// diagonalsAbove: The number of diagonals above the reference diagonal
1013-
let diagonalsBelow = diagonalBaseIndex;
1014-
let diagonalsAbove = numDiagonals - diagonalBaseIndex - 1;
1015-
let diffEven = (numDifferences % 2 === 0);
1009+
const diagonalsBelow = diagonalBaseIndex;
1010+
const diagonalsAbove = numDiagonals - diagonalBaseIndex - 1;
1011+
const diffEven = (numDifferences % 2 === 0);
10161012

10171013
if (diagonal < 0) {
1018-
let lowerBoundEven = (diagonalsBelow % 2 === 0);
1014+
const lowerBoundEven = (diagonalsBelow % 2 === 0);
10191015
return (diffEven === lowerBoundEven) ? 0 : 1;
10201016
} else {
1021-
let upperBoundEven = (diagonalsAbove % 2 === 0);
1017+
const upperBoundEven = (diagonalsAbove % 2 === 0);
10221018
return (diffEven === upperBoundEven) ? numDiagonals - 1 : numDiagonals - 2;
10231019
}
10241020
}

0 commit comments

Comments
 (0)