Skip to content

Commit 0f816a3

Browse files
committed
Diff Algorithm refactoring
1 parent d5b7644 commit 0f816a3

File tree

3 files changed

+10
-10
lines changed

3 files changed

+10
-10
lines changed

src/vs/editor/common/diff/defaultLinesDiffComputer/computeMoves.ts renamed to src/vs/editor/common/diff/defaultLinesDiffComputer/computeMovedLines.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { LinesSliceCharSequence } from 'vs/editor/common/diff/defaultLinesDiffCo
1414
import { LineRangeFragment, isSpace } from 'vs/editor/common/diff/defaultLinesDiffComputer/utils';
1515
import { MyersDiffAlgorithm } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm';
1616

17-
export function computeMoves(
17+
export function computeMovedLines(
1818
changes: DetailedLineRangeMapping[],
1919
originalLines: string[],
2020
modifiedLines: string[],

src/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ import { Range } from 'vs/editor/common/core/range';
1212
import { DateTimeout, ITimeout, InfiniteTimeout, SequenceDiff } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm';
1313
import { DynamicProgrammingDiffing } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/dynamicProgrammingDiffing';
1414
import { MyersDiffAlgorithm } from 'vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm';
15-
import { computeMoves } from 'vs/editor/common/diff/defaultLinesDiffComputer/computeMoves';
16-
import { extendDiffsToEntireWordIfAppropriate, optimizeSequenceDiffs, removeRandomLineMatches, removeRandomMatches, smoothenSequenceDiffs } from 'vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations';
15+
import { computeMovedLines } from 'vs/editor/common/diff/defaultLinesDiffComputer/computeMovedLines';
16+
import { extendDiffsToEntireWordIfAppropriate, optimizeSequenceDiffs, removeVeryShortMatchingLinesBetweenDiffs, removeVeryShortMatchingTextBetweenLongDiffs, removeShortMatches } from 'vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations';
1717
import { ILinesDiffComputer, ILinesDiffComputerOptions, LinesDiff, MovedText } from 'vs/editor/common/diff/linesDiffComputer';
1818
import { DetailedLineRangeMapping, RangeMapping } from '../rangeMapping';
1919
import { LinesSliceCharSequence } from 'vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence';
@@ -87,7 +87,7 @@ export class DefaultLinesDiffComputer implements ILinesDiffComputer {
8787
let lineAlignments = lineAlignmentResult.diffs;
8888
let hitTimeout = lineAlignmentResult.hitTimeout;
8989
lineAlignments = optimizeSequenceDiffs(sequence1, sequence2, lineAlignments);
90-
lineAlignments = removeRandomLineMatches(sequence1, sequence2, lineAlignments);
90+
lineAlignments = removeVeryShortMatchingLinesBetweenDiffs(sequence1, sequence2, lineAlignments);
9191

9292
const alignments: RangeMapping[] = [];
9393

@@ -187,7 +187,7 @@ export class DefaultLinesDiffComputer implements ILinesDiffComputer {
187187
timeout: ITimeout,
188188
considerWhitespaceChanges: boolean,
189189
): MovedText[] {
190-
const moves = computeMoves(
190+
const moves = computeMovedLines(
191191
changes,
192192
originalLines,
193193
modifiedLines,
@@ -217,8 +217,8 @@ export class DefaultLinesDiffComputer implements ILinesDiffComputer {
217217
let diffs = diffResult.diffs;
218218
diffs = optimizeSequenceDiffs(slice1, slice2, diffs);
219219
diffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs);
220-
diffs = smoothenSequenceDiffs(slice1, slice2, diffs);
221-
diffs = removeRandomMatches(slice1, slice2, diffs);
220+
diffs = removeShortMatches(slice1, slice2, diffs);
221+
diffs = removeVeryShortMatchingTextBetweenLongDiffs(slice1, slice2, diffs);
222222

223223
const result = diffs.map(
224224
(d) =>

src/vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ function shiftDiffToBetterPosition(diff: SequenceDiff, sequence1: ISequence, seq
196196
return diff.delta(bestDelta);
197197
}
198198

199-
export function smoothenSequenceDiffs(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {
199+
export function removeShortMatches(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {
200200
const result: SequenceDiff[] = [];
201201
for (const s of sequenceDiffs) {
202202
const last = result[result.length - 1];
@@ -310,7 +310,7 @@ function mergeSequenceDiffs(sequenceDiffs1: SequenceDiff[], sequenceDiffs2: Sequ
310310
return result;
311311
}
312312

313-
export function removeRandomLineMatches(sequence1: LineSequence, _sequence2: LineSequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {
313+
export function removeVeryShortMatchingLinesBetweenDiffs(sequence1: LineSequence, _sequence2: LineSequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {
314314
let diffs = sequenceDiffs;
315315
if (diffs.length === 0) {
316316
return diffs;
@@ -357,7 +357,7 @@ export function removeRandomLineMatches(sequence1: LineSequence, _sequence2: Lin
357357
return diffs;
358358
}
359359

360-
export function removeRandomMatches(sequence1: LinesSliceCharSequence, sequence2: LinesSliceCharSequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {
360+
export function removeVeryShortMatchingTextBetweenLongDiffs(sequence1: LinesSliceCharSequence, sequence2: LinesSliceCharSequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] {
361361
let diffs = sequenceDiffs;
362362
if (diffs.length === 0) {
363363
return diffs;

0 commit comments

Comments
 (0)