2
>
* Copyright (c) Microsoft Corporation. All rights reserved.
3
>
* Licensed under the MIT License. See License.txt in the project root for license information.
4
>
*--------------------------------------------------------------------------------------------*/
5
>
6
>
import { equals } from '../../../../base/common/arrays.js';
7
>
import { assertFn } from '../../../../base/common/assert.js';
8
>
import { LineRange } from '../../core/ranges/lineRange.js';
9
>
import { OffsetRange } from '../../core/ranges/offsetRange.js';
10
>
import { Position } from '../../core/position.js';
11
>
import { Range } from '../../core/range.js';
12
>
import { ArrayText } from '../../core/text/abstractText.js';
13
>
import { ILinesDiffComputer, ILinesDiffComputerOptions, LinesDiff, MovedText } from '../linesDiffComputer.js';
14
>
import { DetailedLineRangeMapping, LineRangeMapping, lineRangeMappingFromRangeMappings, RangeMapping } from '../rangeMapping.js';
15
>
import { DateTimeout, InfiniteTimeout, ITimeout, SequenceDiff } from './algorithms/diffAlgorithm.js';
16
>
import { DynamicProgrammingDiffing } from './algorithms/dynamicProgrammingDiffing.js';
17
>
import { MyersDiffAlgorithm } from './algorithms/myersDiffAlgorithm.js';
18
>
import { computeMovedLines } from './computeMovedLines.js';
19
>
import { extendDiffsToEntireWordIfAppropriate, optimizeSequenceDiffs, removeShortMatches, removeVeryShortMatchingLinesBetweenDiffs, removeVeryShortMatchingTextBetweenLongDiffs } from './heuristicSequenceOptimizations.js';
20
>
import { LineSequence } from './lineSequence.js';
21
>
import { LinesSliceCharSequence } from './linesSliceCharSequence.js';
22
>
23
>
export class DefaultLinesDiffComputer implements ILinesDiffComputer {
24
private readonly dynamicProgrammingDiffing = new DynamicProgrammingDiffing();
25
private readonly myersDiffingAlgorithm = new MyersDiffAlgorithm();
27
>
computeDiff(originalLines: string[], modifiedLines: string[], options: ILinesDiffComputerOptions): LinesDiff {
28
if (originalLines.length <= 1 && equals(originalLines, modifiedLines, (a, b) => a === b)) {
29
return new LinesDiff([], [], false);