@@ -15,7 +15,7 @@ function computeDiff(originalSequence: ISequence, modifiedSequence: ISequence, c
1515 return diffAlgo . ComputeDiff ( pretty ) ;
1616}
1717
18- class LineMarkerSequence implements ISequence {
18+ class LineSequence implements ISequence {
1919
2020 private readonly _lines : string [ ] ;
2121 private readonly _startColumns : number [ ] ;
@@ -25,8 +25,8 @@ class LineMarkerSequence implements ISequence {
2525 let startColumns : number [ ] = [ ] ;
2626 let endColumns : number [ ] = [ ] ;
2727 for ( let i = 0 , length = lines . length ; i < length ; i ++ ) {
28- startColumns [ i ] = LineMarkerSequence . _getFirstNonBlankColumn ( lines [ i ] , 1 ) ;
29- endColumns [ i ] = LineMarkerSequence . _getLastNonBlankColumn ( lines [ i ] , 1 ) ;
28+ startColumns [ i ] = getFirstNonBlankColumn ( lines [ i ] , 1 ) ;
29+ endColumns [ i ] = getLastNonBlankColumn ( lines [ i ] , 1 ) ;
3030 }
3131 this . _lines = lines ;
3232 this . _startColumns = startColumns ;
@@ -45,35 +45,11 @@ class LineMarkerSequence implements ISequence {
4545 return i + 1 ;
4646 }
4747
48- public getStartColumn ( i : number ) : number {
49- return this . _startColumns [ i ] ;
50- }
51-
5248 public getEndLineNumber ( i : number ) : number {
5349 return i + 1 ;
5450 }
5551
56- public getEndColumn ( i : number ) : number {
57- return this . _endColumns [ i ] ;
58- }
59-
60- public static _getFirstNonBlankColumn ( txt : string , defaultValue : number ) : number {
61- const r = strings . firstNonWhitespaceIndex ( txt ) ;
62- if ( r === - 1 ) {
63- return defaultValue ;
64- }
65- return r + 1 ;
66- }
67-
68- public static _getLastNonBlankColumn ( txt : string , defaultValue : number ) : number {
69- const r = strings . lastNonWhitespaceIndex ( txt ) ;
70- if ( r === - 1 ) {
71- return defaultValue ;
72- }
73- return r + 2 ;
74- }
75-
76- public getCharSequence ( shouldIgnoreTrimWhitespace : boolean , startIndex : number , endIndex : number ) : CharSequence {
52+ public createCharSequence ( shouldIgnoreTrimWhitespace : boolean , startIndex : number , endIndex : number ) : CharSequence {
7753 let charCodes : number [ ] = [ ] ;
7854 let lineNumbers : number [ ] = [ ] ;
7955 let columns : number [ ] = [ ] ;
@@ -254,7 +230,7 @@ class LineChange implements ILineChange {
254230 this . charChanges = charChanges ;
255231 }
256232
257- public static createFromDiffResult ( shouldIgnoreTrimWhitespace : boolean , diffChange : IDiffChange , originalLineSequence : LineMarkerSequence , modifiedLineSequence : LineMarkerSequence , continueProcessingPredicate : ( ) => boolean , shouldComputeCharChanges : boolean , shouldPostProcessCharChanges : boolean ) : LineChange {
233+ public static createFromDiffResult ( shouldIgnoreTrimWhitespace : boolean , diffChange : IDiffChange , originalLineSequence : LineSequence , modifiedLineSequence : LineSequence , continueProcessingPredicate : ( ) => boolean , shouldComputeCharChanges : boolean , shouldPostProcessCharChanges : boolean ) : LineChange {
258234 let originalStartLineNumber : number ;
259235 let originalEndLineNumber : number ;
260236 let modifiedStartLineNumber : number ;
@@ -278,8 +254,8 @@ class LineChange implements ILineChange {
278254 }
279255
280256 if ( shouldComputeCharChanges && diffChange . originalLength !== 0 && diffChange . modifiedLength !== 0 && continueProcessingPredicate ( ) ) {
281- const originalCharSequence = originalLineSequence . getCharSequence ( shouldIgnoreTrimWhitespace , diffChange . originalStart , diffChange . originalStart + diffChange . originalLength - 1 ) ;
282- const modifiedCharSequence = modifiedLineSequence . getCharSequence ( shouldIgnoreTrimWhitespace , diffChange . modifiedStart , diffChange . modifiedStart + diffChange . modifiedLength - 1 ) ;
257+ const originalCharSequence = originalLineSequence . createCharSequence ( shouldIgnoreTrimWhitespace , diffChange . originalStart , diffChange . originalStart + diffChange . originalLength - 1 ) ;
258+ const modifiedCharSequence = modifiedLineSequence . createCharSequence ( shouldIgnoreTrimWhitespace , diffChange . modifiedStart , diffChange . modifiedStart + diffChange . modifiedLength - 1 ) ;
283259
284260 let rawChanges = computeDiff ( originalCharSequence , modifiedCharSequence , continueProcessingPredicate , true ) ;
285261
@@ -313,8 +289,8 @@ export class DiffComputer {
313289 private readonly maximumRunTimeMs : number ;
314290 private readonly originalLines : string [ ] ;
315291 private readonly modifiedLines : string [ ] ;
316- private readonly original : LineMarkerSequence ;
317- private readonly modified : LineMarkerSequence ;
292+ private readonly original : LineSequence ;
293+ private readonly modified : LineSequence ;
318294
319295 private computationStartTime : number ;
320296
@@ -326,8 +302,8 @@ export class DiffComputer {
326302 this . maximumRunTimeMs = MAXIMUM_RUN_TIME ;
327303 this . originalLines = originalLines ;
328304 this . modifiedLines = modifiedLines ;
329- this . original = new LineMarkerSequence ( originalLines ) ;
330- this . modified = new LineMarkerSequence ( modifiedLines ) ;
305+ this . original = new LineSequence ( originalLines ) ;
306+ this . modified = new LineSequence ( modifiedLines ) ;
331307
332308 this . computationStartTime = ( new Date ( ) ) . getTime ( ) ;
333309 }
@@ -409,8 +385,8 @@ export class DiffComputer {
409385
410386 // Check the leading whitespace
411387 {
412- let originalStartColumn = LineMarkerSequence . _getFirstNonBlankColumn ( originalLine , 1 ) ;
413- let modifiedStartColumn = LineMarkerSequence . _getFirstNonBlankColumn ( modifiedLine , 1 ) ;
388+ let originalStartColumn = getFirstNonBlankColumn ( originalLine , 1 ) ;
389+ let modifiedStartColumn = getFirstNonBlankColumn ( modifiedLine , 1 ) ;
414390 while ( originalStartColumn > 1 && modifiedStartColumn > 1 ) {
415391 const originalChar = originalLine . charCodeAt ( originalStartColumn - 2 ) ;
416392 const modifiedChar = modifiedLine . charCodeAt ( modifiedStartColumn - 2 ) ;
@@ -431,8 +407,8 @@ export class DiffComputer {
431407
432408 // Check the trailing whitespace
433409 {
434- let originalEndColumn = LineMarkerSequence . _getLastNonBlankColumn ( originalLine , 1 ) ;
435- let modifiedEndColumn = LineMarkerSequence . _getLastNonBlankColumn ( modifiedLine , 1 ) ;
410+ let originalEndColumn = getLastNonBlankColumn ( originalLine , 1 ) ;
411+ let modifiedEndColumn = getLastNonBlankColumn ( modifiedLine , 1 ) ;
436412 const originalMaxColumn = originalLine . length + 1 ;
437413 const modifiedMaxColumn = modifiedLine . length + 1 ;
438414 while ( originalEndColumn < originalMaxColumn && modifiedEndColumn < modifiedMaxColumn ) {
@@ -534,3 +510,19 @@ export class DiffComputer {
534510 }
535511
536512}
513+
514+ function getFirstNonBlankColumn ( txt : string , defaultValue : number ) : number {
515+ const r = strings . firstNonWhitespaceIndex ( txt ) ;
516+ if ( r === - 1 ) {
517+ return defaultValue ;
518+ }
519+ return r + 1 ;
520+ }
521+
522+ function getLastNonBlankColumn ( txt : string , defaultValue : number ) : number {
523+ const r = strings . lastNonWhitespaceIndex ( txt ) ;
524+ if ( r === - 1 ) {
525+ return defaultValue ;
526+ }
527+ return r + 2 ;
528+ }
0 commit comments