360
361
export function getLineRangeMapping(rangeMapping: RangeMapping, originalLines: AbstractText, modifiedLines: AbstractText): DetailedLineRangeMapping {
363
>
let lineEndDelta = 0;
364
>
365
>
// rangeMapping describes the edit that replaces `rangeMapping.originalRange` with `newText := getText(modifiedLines, rangeMapping.modifiedRange)`.
366
>
367
>
// original: ]xxx \n <- this line is not modified
368
>
// modified: ]xx \n
369
>
if (rangeMapping.modifiedRange.endColumn === 1 && rangeMapping.originalRange.endColumn === 1
370
&& rangeMapping.originalRange.startLineNumber + lineStartDelta <= rangeMapping.originalRange.endLineNumber
371
>
&& rangeMapping.modifiedRange.startLineNumber + lineStartDelta <= rangeMapping.modifiedRange.endLineNumber) {
rangeMapping.ts
372
// We can only do this if the range is not empty yet
373
lineEndDelta = -1;
374
}
376
>
// original: xxx[ \n <- this line is not modified
377
>
// modified: xxx[ \n
378
>
if (rangeMapping.modifiedRange.startColumn - 1 >= modifiedLines.getLineLength(rangeMapping.modifiedRange.startLineNumber)
379
&& rangeMapping.originalRange.startColumn - 1 >= originalLines.getLineLength(rangeMapping.originalRange.startLineNumber)
380
&& rangeMapping.originalRange.startLineNumber <= rangeMapping.originalRange.endLineNumber + lineEndDelta
381
>
&& rangeMapping.modifiedRange.startLineNumber <= rangeMapping.modifiedRange.endLineNumber + lineEndDelta) {
rangeMapping.ts
382
// We can only do this if the range is not empty yet
383
lineStartDelta = 1;
384
}
386
>
const originalLineRange = new LineRange(
387
>
rangeMapping.originalRange.startLineNumber + lineStartDelta,
388
>
rangeMapping.originalRange.endLineNumber + 1 + lineEndDelta
389
>
);
390
>
const modifiedLineRange = new LineRange(
391
>
rangeMapping.modifiedRange.startLineNumber + lineStartDelta,
392
>
rangeMapping.modifiedRange.endLineNumber + 1 + lineEndDelta
393
>
);
394
>
395
>
return new DetailedLineRangeMapping(originalLineRange, modifiedLineRange, [rangeMapping]);
396
>
}
397
398
export function lineRangeMappingFromChange(change: IChange): LineRangeMapping {