From c503e1c9aa8aeb585776a692b172d057623883ef Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Thu, 1 Dec 2022 19:44:43 +0100 Subject: [PATCH 1/4] Fixes bug in fixture test. --- src/vs/editor/test/node/diffing/diffing.test.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/vs/editor/test/node/diffing/diffing.test.ts b/src/vs/editor/test/node/diffing/diffing.test.ts index 216fa03a131..73bd0cc58af 100644 --- a/src/vs/editor/test/node/diffing/diffing.test.ts +++ b/src/vs/editor/test/node/diffing/diffing.test.ts @@ -52,17 +52,15 @@ suite('diff fixtures', () => { const invalidExists = existsSync(invalidFilePath); if (!existsSync(expectedFilePath)) { + // New test, create the files writeFileSync(expectedFilePath, expectedFileContentFromActual); writeFileSync(invalidFilePath, ''); throw new Error('No expected file! Expected and invalid files were written. Delete the invalid file to make the test pass.'); } else { const expectedFileContent = readFileSync(invalidExists ? invalidFilePath : expectedFilePath, 'utf8'); - if (invalidExists && expectedFileContent === '') { - throw new Error('Delete the invalid file to make the test pass.'); - } - const expectedFileDiffResult: DiffingResult = JSON.parse(expectedFileContent); try { + const expectedFileDiffResult: DiffingResult = JSON.parse(expectedFileContent); assert.deepStrictEqual(actualDiffingResult, expectedFileDiffResult); } catch (e) { if (!invalidExists) { @@ -71,6 +69,11 @@ suite('diff fixtures', () => { writeFileSync(expectedFilePath, expectedFileContentFromActual); throw e; } + + if (invalidExists && expectedFileContent === '') { + throw new Error('Delete the invalid file to make the test pass.'); + } + writeFileSync(expectedFilePath, expectedFileContentFromActual); } if (invalidExists) { @@ -87,7 +90,7 @@ suite('diff fixtures', () => { } test(`debug`, () => { - runTest('penalize-fragmentation', 'experimental'); + runTest('intra-block-align', 'experimental'); }); }); From b9fa523e9903b1853882f7430164ccf93d980cb3 Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Thu, 1 Dec 2022 19:46:48 +0100 Subject: [PATCH 2/4] Implements sequence joining --- .../common/diff/algorithms/diffAlgorithm.ts | 4 + .../diff/algorithms/joinSequenceDiffs.ts | 19 + .../common/diff/standardLinesDiffComputer.ts | 5 +- .../experimental.expected.diff.json | 236 +---------- .../experimental.expected.diff.json | 8 +- .../experimental.expected.diff.json | 36 +- .../diffing/fixtures/random-match-1/1.tst | 1 + .../diffing/fixtures/random-match-1/2.tst | 1 + .../experimental.expected.diff.json | 16 + .../random-match-1/smart.expected.diff.json | 16 + .../random-match-1/smart.invalid.diff.json | 0 .../diffing/fixtures/random-match-2/1.tst | 7 + .../diffing/fixtures/random-match-2/2.tst | 4 + .../experimental.expected.diff.json | 40 ++ .../random-match-2/smart.expected.diff.json | 40 ++ .../random-match-2/smart.invalid.diff.json | 0 .../diffing/fixtures/random-match-3/1.tst | 1 + .../diffing/fixtures/random-match-3/2.tst | 3 + .../experimental.expected.diff.json | 24 ++ .../random-match-3/smart.expected.diff.json | 24 ++ .../random-match-3/smart.invalid.diff.json | 0 .../experimental.expected.diff.json | 392 +----------------- .../experimental.expected.diff.json | 76 +--- .../experimental.expected.diff.json | 196 +-------- .../experimental.expected.diff.json | 32 +- 25 files changed, 271 insertions(+), 910 deletions(-) create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-1/1.tst create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-1/2.tst create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-1/experimental.expected.diff.json create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-1/smart.expected.diff.json create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-1/smart.invalid.diff.json create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-2/1.tst create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-2/2.tst create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-2/experimental.expected.diff.json create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-2/smart.expected.diff.json create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-2/smart.invalid.diff.json create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-3/1.tst create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-3/2.tst create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-3/experimental.expected.diff.json create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-3/smart.expected.diff.json create mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-3/smart.invalid.diff.json diff --git a/src/vs/editor/common/diff/algorithms/diffAlgorithm.ts b/src/vs/editor/common/diff/algorithms/diffAlgorithm.ts index 0222a85c4b5..1ac613d3109 100644 --- a/src/vs/editor/common/diff/algorithms/diffAlgorithm.ts +++ b/src/vs/editor/common/diff/algorithms/diffAlgorithm.ts @@ -46,6 +46,10 @@ export class OffsetRange { public toString() { return `[${this.start}, ${this.endExclusive})`; } + + public join(other: OffsetRange): OffsetRange { + return new OffsetRange(Math.min(this.start, other.start), Math.max(this.endExclusive, other.endExclusive)); + } } export interface ISequence { diff --git a/src/vs/editor/common/diff/algorithms/joinSequenceDiffs.ts b/src/vs/editor/common/diff/algorithms/joinSequenceDiffs.ts index 2c8ad0bdaa2..88a0a86741f 100644 --- a/src/vs/editor/common/diff/algorithms/joinSequenceDiffs.ts +++ b/src/vs/editor/common/diff/algorithms/joinSequenceDiffs.ts @@ -12,6 +12,25 @@ export function optimizeSequenceDiffs(sequence1: ISequence, sequence2: ISequence return result; } +export function smoothenSequenceDiffs(sequence1: ISequence, sequence2: ISequence, sequenceDiffs: SequenceDiff[]): SequenceDiff[] { + const result: SequenceDiff[] = []; + for (const s of sequenceDiffs) { + const last = result[result.length - 1]; + if (!last) { + result.push(s); + continue; + } + + if (s.seq1Range.start - last.seq1Range.endExclusive <= 2 || s.seq2Range.start - last.seq2Range.endExclusive <= 2) { + result[result.length - 1] = new SequenceDiff(last.seq1Range.join(s.seq1Range), last.seq2Range.join(s.seq2Range)); + } else { + result.push(s); + } + } + + return result; +} + /** * This function fixes issues like this: * ``` diff --git a/src/vs/editor/common/diff/standardLinesDiffComputer.ts b/src/vs/editor/common/diff/standardLinesDiffComputer.ts index a737747ae0c..de289902022 100644 --- a/src/vs/editor/common/diff/standardLinesDiffComputer.ts +++ b/src/vs/editor/common/diff/standardLinesDiffComputer.ts @@ -9,7 +9,7 @@ import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; import { OffsetRange, SequenceDiff, ISequence } from 'vs/editor/common/diff/algorithms/diffAlgorithm'; import { DynamicProgrammingDiffing } from 'vs/editor/common/diff/algorithms/dynamicProgrammingDiffing'; -import { optimizeSequenceDiffs } from 'vs/editor/common/diff/algorithms/joinSequenceDiffs'; +import { optimizeSequenceDiffs, smoothenSequenceDiffs } from 'vs/editor/common/diff/algorithms/joinSequenceDiffs'; import { MyersDiffAlgorithm } from 'vs/editor/common/diff/algorithms/myersDiffAlgorithm'; import { ILinesDiff, ILinesDiffComputer, ILinesDiffComputerOptions, LineRange, LineRangeMapping, RangeMapping } from 'vs/editor/common/diff/linesDiffComputer'; @@ -116,7 +116,8 @@ export class StandardLinesDiffComputer implements ILinesDiffComputer { ? this.dynamicProgrammingDiffing.compute(sourceSlice, targetSlice) : this.myersDiffingAlgorithm.compute(sourceSlice, targetSlice); - const diffs = optimizeSequenceDiffs(sourceSlice, targetSlice, originalDiffs); + let diffs = optimizeSequenceDiffs(sourceSlice, targetSlice, originalDiffs); + diffs = smoothenSequenceDiffs(sourceSlice, targetSlice, diffs); const result = diffs.map( (d) => new RangeMapping( diff --git a/src/vs/editor/test/node/diffing/fixtures/method-splitting/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/method-splitting/experimental.expected.diff.json index 170a04318c6..f79a1b00f3a 100644 --- a/src/vs/editor/test/node/diffing/fixtures/method-splitting/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/method-splitting/experimental.expected.diff.json @@ -7,72 +7,16 @@ "modifiedRange": "[6,8)", "innerChanges": [ { - "originalRange": "[6,3 -> 6,6]", - "modifiedRange": "[6,3 -> 6,4]" - }, - { - "originalRange": "[6,7 -> 6,8]", - "modifiedRange": "[6,5 -> 6,9]" - }, - { - "originalRange": "[6,9 -> 6,9]", - "modifiedRange": "[6,10 -> 6,11]" + "originalRange": "[6,3 -> 6,9]", + "modifiedRange": "[6,3 -> 6,11]" }, { "originalRange": "[6,12 -> 6,18]", "modifiedRange": "[6,14 -> 6,14]" }, { - "originalRange": "[6,29 -> 6,32]", - "modifiedRange": "[6,25 -> 6,26]" - }, - { - "originalRange": "[6,33 -> 6,34]", - "modifiedRange": "[6,27 -> 6,27]" - }, - { - "originalRange": "[6,35 -> 6,35]", - "modifiedRange": "[6,28 -> 6,37]" - }, - { - "originalRange": "[6,36 -> 6,37]", - "modifiedRange": "[6,38 -> 6,39]" - }, - { - "originalRange": "[6,38 -> 6,38]", - "modifiedRange": "[6,40 -> 6,48]" - }, - { - "originalRange": "[6,39 -> 6,39]", - "modifiedRange": "[6,49 -> 6,50]" - }, - { - "originalRange": "[6,40 -> 6,42]", - "modifiedRange": "[6,51 -> 6,68]" - }, - { - "originalRange": "[6,43 -> 6,44]", - "modifiedRange": "[6,69 -> 6,72]" - }, - { - "originalRange": "[6,45 -> 6,45]", - "modifiedRange": "[6,73 -> 6,75]" - }, - { - "originalRange": "[6,46 -> 6,46]", - "modifiedRange": "[6,76 -> 6,82]" - }, - { - "originalRange": "[6,48 -> 6,51]", - "modifiedRange": "[6,84 -> 6,84]" - }, - { - "originalRange": "[6,52 -> 6,52]", - "modifiedRange": "[6,85 -> 6,88]" - }, - { - "originalRange": "[6,53 -> 6,54]", - "modifiedRange": "[6,89 -> 6,91]" + "originalRange": "[6,29 -> 6,54]", + "modifiedRange": "[6,25 -> 6,91]" }, { "originalRange": "[6,58 -> 6,63]", @@ -83,176 +27,28 @@ "modifiedRange": "[6,105 -> 6,118]" }, { - "originalRange": "[7,9 -> 7,13]", - "modifiedRange": "[7,9 -> 7,12]" + "originalRange": "[7,9 -> 7,38]", + "modifiedRange": "[7,9 -> 7,27]" }, { - "originalRange": "[7,14 -> 7,18]", - "modifiedRange": "[7,13 -> 7,15]" + "originalRange": "[7,64 -> 7,105]", + "modifiedRange": "[7,53 -> 7,85]" }, { - "originalRange": "[7,19 -> 7,22]", - "modifiedRange": "[7,16 -> 7,19]" + "originalRange": "[7,112 -> 8,11]", + "modifiedRange": "[7,92 -> 7,131]" }, { - "originalRange": "[7,23 -> 7,28]", - "modifiedRange": "[7,20 -> 7,21]" + "originalRange": "[8,15 -> 8,23]", + "modifiedRange": "[7,135 -> 7,142]" }, { - "originalRange": "[7,29 -> 7,29]", - "modifiedRange": "[7,22 -> 7,23]" + "originalRange": "[8,29 -> 8,51]", + "modifiedRange": "[7,148 -> 7,170]" }, { - "originalRange": "[7,30 -> 7,38]", - "modifiedRange": "[7,24 -> 7,27]" - }, - { - "originalRange": "[7,64 -> 7,66]", - "modifiedRange": "[7,53 -> 7,54]" - }, - { - "originalRange": "[7,67 -> 7,69]", - "modifiedRange": "[7,55 -> 7,60]" - }, - { - "originalRange": "[7,70 -> 7,70]", - "modifiedRange": "[7,61 -> 7,62]" - }, - { - "originalRange": "[7,71 -> 7,74]", - "modifiedRange": "[7,63 -> 7,65]" - }, - { - "originalRange": "[7,75 -> 7,80]", - "modifiedRange": "[7,66 -> 7,68]" - }, - { - "originalRange": "[7,81 -> 7,81]", - "modifiedRange": "[7,69 -> 7,71]" - }, - { - "originalRange": "[7,82 -> 7,83]", - "modifiedRange": "[7,72 -> 7,73]" - }, - { - "originalRange": "[7,84 -> 7,85]", - "modifiedRange": "[7,74 -> 7,74]" - }, - { - "originalRange": "[7,86 -> 7,91]", - "modifiedRange": "[7,75 -> 7,78]" - }, - { - "originalRange": "[7,92 -> 7,97]", - "modifiedRange": "[7,79 -> 7,82]" - }, - { - "originalRange": "[7,98 -> 7,98]", - "modifiedRange": "[7,83 -> 7,84]" - }, - { - "originalRange": "[7,99 -> 7,105]", - "modifiedRange": "[7,85 -> 7,85]" - }, - { - "originalRange": "[7,112 -> 7,116]", - "modifiedRange": "[7,92 -> 7,92]" - }, - { - "originalRange": "[7,117 -> 7,119]", - "modifiedRange": "[7,93 -> 7,96]" - }, - { - "originalRange": "[7,120 -> 7,120]", - "modifiedRange": "[7,97 -> 7,104]" - }, - { - "originalRange": "[7,121 -> 7,124]", - "modifiedRange": "[7,105 -> 7,105]" - }, - { - "originalRange": "[7,125 -> 7,130]", - "modifiedRange": "[7,106 -> 7,106]" - }, - { - "originalRange": "[7,131 -> 7,132]", - "modifiedRange": "[7,107 -> 7,108]" - }, - { - "originalRange": "[7,133 -> 7,133]", - "modifiedRange": "[7,109 -> 7,111]" - }, - { - "originalRange": "[7,134 -> 7,137]", - "modifiedRange": "[7,112 -> 7,115]" - }, - { - "originalRange": "[7,138 -> 7,138]", - "modifiedRange": "[7,116 -> 7,117]" - }, - { - "originalRange": "[7,139 -> 7,139]", - "modifiedRange": "[7,118 -> 7,119]" - }, - { - "originalRange": "[7,140 -> 7,141]", - "modifiedRange": "[7,120 -> 7,123]" - }, - { - "originalRange": "[7,142 -> 7,144]", - "modifiedRange": "[7,124 -> 7,126]" - }, - { - "originalRange": "[7,145 -> 7,148]", - "modifiedRange": "[7,127 -> 7,127]" - }, - { - "originalRange": "[7,149 -> 7,149]", - "modifiedRange": "[7,128 -> 7,129]" - }, - { - "originalRange": "[7,150 -> 8,5]", - "modifiedRange": "[7,130 -> 7,130]" - }, - { - "originalRange": "[8,6 -> 8,11]", - "modifiedRange": "[7,131 -> 7,131]" - }, - { - "originalRange": "[8,15 -> 8,21]", - "modifiedRange": "[7,135 -> 7,135]" - }, - { - "originalRange": "[8,23 -> 8,23]", - "modifiedRange": "[7,137 -> 7,142]" - }, - { - "originalRange": "[8,29 -> 8,44]", - "modifiedRange": "[7,148 -> 7,148]" - }, - { - "originalRange": "[8,45 -> 8,45]", - "modifiedRange": "[7,149 -> 7,152]" - }, - { - "originalRange": "[8,46 -> 8,46]", - "modifiedRange": "[7,153 -> 7,160]" - }, - { - "originalRange": "[8,48 -> 8,48]", - "modifiedRange": "[7,162 -> 7,164]" - }, - { - "originalRange": "[8,50 -> 8,51]", - "modifiedRange": "[7,166 -> 7,170]" - }, - { - "originalRange": "[8,62 -> 8,65]", - "modifiedRange": "[7,181 -> 7,182]" - }, - { - "originalRange": "[9,1 -> 10,1]", - "modifiedRange": "[8,1 -> 8,1]" + "originalRange": "[8,62 -> 10,1]", + "modifiedRange": "[7,181 -> 8,1]" } ] }, diff --git a/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/experimental.expected.diff.json index a0aea479fa4..430db713be3 100644 --- a/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/minimal-diff-character/experimental.expected.diff.json @@ -17,12 +17,8 @@ "modifiedRange": "[5,6)", "innerChanges": [ { - "originalRange": "[5,2 -> 5,2]", - "modifiedRange": "[5,2 -> 5,56]" - }, - { - "originalRange": "[5,4 -> 5,4]", - "modifiedRange": "[5,58 -> 5,61]" + "originalRange": "[5,2 -> 5,4]", + "modifiedRange": "[5,2 -> 5,61]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/experimental.expected.diff.json index 5d48723b5c5..d7f36726db7 100644 --- a/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/experimental.expected.diff.json @@ -7,40 +7,16 @@ "modifiedRange": "[1,3)", "innerChanges": [ { - "originalRange": "[1,11 -> 1,14]", - "modifiedRange": "[1,11 -> 1,17]" + "originalRange": "[1,11 -> 1,20]", + "modifiedRange": "[1,11 -> 1,19]" }, { - "originalRange": "[1,15 -> 1,20]", - "modifiedRange": "[1,18 -> 1,19]" + "originalRange": "[1,24 -> 1,31]", + "modifiedRange": "[1,23 -> 1,33]" }, { - "originalRange": "[1,24 -> 1,25]", - "modifiedRange": "[1,23 -> 1,25]" - }, - { - "originalRange": "[1,26 -> 1,27]", - "modifiedRange": "[1,26 -> 1,32]" - }, - { - "originalRange": "[1,28 -> 1,31]", - "modifiedRange": "[1,33 -> 1,33]" - }, - { - "originalRange": "[1,35 -> 1,36]", - "modifiedRange": "[1,37 -> 1,50]" - }, - { - "originalRange": "[1,37 -> 1,38]", - "modifiedRange": "[1,51 -> 1,72]" - }, - { - "originalRange": "[1,39 -> 1,40]", - "modifiedRange": "[1,73 -> 2,6]" - }, - { - "originalRange": "[1,42 -> 1,42]", - "modifiedRange": "[2,8 -> 2,18]" + "originalRange": "[1,35 -> 1,42]", + "modifiedRange": "[1,37 -> 2,18]" }, { "originalRange": "[1,72 -> 1,73]", diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-1/1.tst b/src/vs/editor/test/node/diffing/fixtures/random-match-1/1.tst new file mode 100644 index 00000000000..27318eeb81d --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-1/1.tst @@ -0,0 +1 @@ +const sourceActions = notebookKernelService.getSourceActions(notebook, editor.scopedContextKeyService); diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-1/2.tst b/src/vs/editor/test/node/diffing/fixtures/random-match-1/2.tst new file mode 100644 index 00000000000..fb41c27499f --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-1/2.tst @@ -0,0 +1 @@ +const sourceActions = notebookKernelService.getSourceActions(notebookTextModel, scopedContextKeyService); diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-1/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-1/experimental.expected.diff.json new file mode 100644 index 00000000000..753a7c75cbc --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-1/experimental.expected.diff.json @@ -0,0 +1,16 @@ +{ + "originalFileName": "./1.tst", + "modifiedFileName": "./2.tst", + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,2)", + "innerChanges": [ + { + "originalRange": "[1,70 -> 1,79]", + "modifiedRange": "[1,70 -> 1,81]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-1/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-1/smart.expected.diff.json new file mode 100644 index 00000000000..753a7c75cbc --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-1/smart.expected.diff.json @@ -0,0 +1,16 @@ +{ + "originalFileName": "./1.tst", + "modifiedFileName": "./2.tst", + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,2)", + "innerChanges": [ + { + "originalRange": "[1,70 -> 1,79]", + "modifiedRange": "[1,70 -> 1,81]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-1/smart.invalid.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-1/smart.invalid.diff.json new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-2/1.tst b/src/vs/editor/test/node/diffing/fixtures/random-match-2/1.tst new file mode 100644 index 00000000000..2e78ff135e7 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-2/1.tst @@ -0,0 +1,7 @@ +if (!all.length && !sourceActions.length) { + const activeNotebookModel = getNotebookEditorFromEditorPane(editorService.activeEditorPane)?.textModel; + if (activeNotebookModel) { + const language = this.getSuggestedLanguage(activeNotebookModel); + suggestedExtension = language ? this.getSuggestedKernelFromLanguage(activeNotebookModel.viewType, language) : undefined; + } + if (suggestedExtension) { diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-2/2.tst b/src/vs/editor/test/node/diffing/fixtures/random-match-2/2.tst new file mode 100644 index 00000000000..5a079679cf2 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-2/2.tst @@ -0,0 +1,4 @@ +if (!all.length && !sourceActions.length) { + const language = this.getSuggestedLanguage(notebookTextModel); + suggestedExtension = language ? this.getSuggestedKernelFromLanguage(notebookTextModel.viewType, language) : undefined; + if (suggestedExtension) { diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-2/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-2/experimental.expected.diff.json new file mode 100644 index 00000000000..6b84b4c6209 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-2/experimental.expected.diff.json @@ -0,0 +1,40 @@ +{ + "originalFileName": "./1.tst", + "modifiedFileName": "./2.tst", + "diffs": [ + { + "originalRange": "[2,7)", + "modifiedRange": "[2,4)", + "innerChanges": [ + { + "originalRange": "[2,8 -> 4,11]", + "modifiedRange": "[2,8 -> 2,10]" + }, + { + "originalRange": "[4,46 -> 4,53]", + "modifiedRange": "[2,45 -> 2,46]" + }, + { + "originalRange": "[4,60 -> 4,60]", + "modifiedRange": "[2,53 -> 2,57]" + }, + { + "originalRange": "[5,1 -> 5,2]", + "modifiedRange": "[3,1 -> 3,1]" + }, + { + "originalRange": "[5,71 -> 5,78]", + "modifiedRange": "[3,70 -> 3,71]" + }, + { + "originalRange": "[5,85 -> 5,85]", + "modifiedRange": "[3,78 -> 3,82]" + }, + { + "originalRange": "[6,1 -> 7,1]", + "modifiedRange": "[4,1 -> 4,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-2/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-2/smart.expected.diff.json new file mode 100644 index 00000000000..d727a596dd4 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-2/smart.expected.diff.json @@ -0,0 +1,40 @@ +{ + "originalFileName": "./1.tst", + "modifiedFileName": "./2.tst", + "diffs": [ + { + "originalRange": "[2,7)", + "modifiedRange": "[2,4)", + "innerChanges": [ + { + "originalRange": "[2,1 -> 4,2]", + "modifiedRange": "[2,1 -> 2,1]" + }, + { + "originalRange": "[4,46 -> 4,53]", + "modifiedRange": "[2,45 -> 2,46]" + }, + { + "originalRange": "[4,60 -> 4,60]", + "modifiedRange": "[2,53 -> 2,57]" + }, + { + "originalRange": "[5,2 -> 5,3]", + "modifiedRange": "[3,2 -> 3,2]" + }, + { + "originalRange": "[5,71 -> 5,78]", + "modifiedRange": "[3,70 -> 3,71]" + }, + { + "originalRange": "[5,85 -> 5,85]", + "modifiedRange": "[3,78 -> 3,82]" + }, + { + "originalRange": "[5,123 -> 6,3]", + "modifiedRange": "[3,120 -> 3,120]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-2/smart.invalid.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-2/smart.invalid.diff.json new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-3/1.tst b/src/vs/editor/test/node/diffing/fixtures/random-match-3/1.tst new file mode 100644 index 00000000000..9e71f27c23a --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-3/1.tst @@ -0,0 +1 @@ +const { selected, all, suggestions, hidden } = notebookKernelService.getMatchingKernel(notebook); diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-3/2.tst b/src/vs/editor/test/node/diffing/fixtures/random-match-3/2.tst new file mode 100644 index 00000000000..fed378e6200 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-3/2.tst @@ -0,0 +1,3 @@ +const scopedContextKeyService = editor.scopedContextKeyService; +const matchResult = notebookKernelService.getMatchingKernel(notebook); +const { selected, all } = matchResult; diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-3/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-3/experimental.expected.diff.json new file mode 100644 index 00000000000..5c70300bec8 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-3/experimental.expected.diff.json @@ -0,0 +1,24 @@ +{ + "originalFileName": "./1.tst", + "modifiedFileName": "./2.tst", + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,4)", + "innerChanges": [ + { + "originalRange": "[1,6 -> 1,32]", + "modifiedRange": "[1,6 -> 2,2]" + }, + { + "originalRange": "[1,35 -> 1,45]", + "modifiedRange": "[2,5 -> 2,18]" + }, + { + "originalRange": "[2,1 -> 2,1]", + "modifiedRange": "[3,1 -> 4,1]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-3/smart.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-3/smart.expected.diff.json new file mode 100644 index 00000000000..f5d18c303e1 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-3/smart.expected.diff.json @@ -0,0 +1,24 @@ +{ + "originalFileName": "./1.tst", + "modifiedFileName": "./2.tst", + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,4)", + "innerChanges": [ + { + "originalRange": "[1,7 -> 1,32]", + "modifiedRange": "[1,7 -> 2,2]" + }, + { + "originalRange": "[1,35 -> 1,45]", + "modifiedRange": "[2,5 -> 2,18]" + }, + { + "originalRange": "[1,98 -> 1,98]", + "modifiedRange": "[2,71 -> 3,39]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-3/smart.invalid.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-3/smart.invalid.diff.json new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/experimental.expected.diff.json index ac20b09d1e5..37bf0534f87 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/experimental.expected.diff.json @@ -17,28 +17,8 @@ "modifiedRange": "[4,5)", "innerChanges": [ { - "originalRange": "[4,69 -> 4,69]", - "modifiedRange": "[4,69 -> 4,72]" - }, - { - "originalRange": "[4,70 -> 4,71]", - "modifiedRange": "[4,73 -> 4,74]" - }, - { - "originalRange": "[4,72 -> 4,84]", - "modifiedRange": "[4,75 -> 4,75]" - }, - { - "originalRange": "[4,85 -> 4,89]", - "modifiedRange": "[4,76 -> 4,76]" - }, - { - "originalRange": "[4,91 -> 4,95]", - "modifiedRange": "[4,78 -> 4,82]" - }, - { - "originalRange": "[4,96 -> 4,103]", - "modifiedRange": "[4,83 -> 4,88]" + "originalRange": "[4,69 -> 4,103]", + "modifiedRange": "[4,69 -> 4,88]" }, { "originalRange": "[4,109 -> 4,110]", @@ -55,16 +35,8 @@ "modifiedRange": "[11,12)", "innerChanges": [ { - "originalRange": "[11,61 -> 11,87]", - "modifiedRange": "[11,61 -> 11,61]" - }, - { - "originalRange": "[11,88 -> 11,89]", - "modifiedRange": "[11,62 -> 11,62]" - }, - { - "originalRange": "[11,90 -> 11,93]", - "modifiedRange": "[11,63 -> 11,63]" + "originalRange": "[11,61 -> 11,93]", + "modifiedRange": "[11,61 -> 11,63]" }, { "originalRange": "[11,97 -> 11,101]", @@ -77,68 +49,12 @@ "modifiedRange": "[14,18)", "innerChanges": [ { - "originalRange": "[14,120 -> 14,120]", - "modifiedRange": "[14,120 -> 14,123]" + "originalRange": "[14,120 -> 14,154]", + "modifiedRange": "[14,120 -> 14,162]" }, { - "originalRange": "[14,121 -> 14,123]", - "modifiedRange": "[14,124 -> 14,124]" - }, - { - "originalRange": "[14,124 -> 14,125]", - "modifiedRange": "[14,125 -> 14,133]" - }, - { - "originalRange": "[14,126 -> 14,128]", - "modifiedRange": "[14,134 -> 14,136]" - }, - { - "originalRange": "[14,129 -> 14,129]", - "modifiedRange": "[14,137 -> 14,141]" - }, - { - "originalRange": "[14,130 -> 14,133]", - "modifiedRange": "[14,142 -> 14,144]" - }, - { - "originalRange": "[14,135 -> 14,136]", - "modifiedRange": "[14,146 -> 14,148]" - }, - { - "originalRange": "[14,137 -> 14,143]", - "modifiedRange": "[14,149 -> 14,151]" - }, - { - "originalRange": "[14,144 -> 14,148]", - "modifiedRange": "[14,152 -> 14,152]" - }, - { - "originalRange": "[14,149 -> 14,150]", - "modifiedRange": "[14,153 -> 14,156]" - }, - { - "originalRange": "[14,151 -> 14,154]", - "modifiedRange": "[14,157 -> 14,162]" - }, - { - "originalRange": "[14,165 -> 14,168]", - "modifiedRange": "[14,173 -> 14,174]" - }, - { - "originalRange": "[14,169 -> 14,170]", - "modifiedRange": "[14,175 -> 14,179]" - }, - { - "originalRange": "[14,171 -> 14,171]", - "modifiedRange": "[14,180 -> 16,5]" - }, - { - "originalRange": "[14,172 -> 14,176]", - "modifiedRange": "[16,6 -> 16,17]" - }, - { - "originalRange": "[14,177 -> 14,178]", - "modifiedRange": "[16,18 -> 16,22]" + "originalRange": "[14,165 -> 14,178]", + "modifiedRange": "[14,173 -> 16,22]" }, { "originalRange": "[14,181 -> 14,181]", @@ -149,40 +65,8 @@ "modifiedRange": "[16,40 -> 16,47]" }, { - "originalRange": "[14,196 -> 14,198]", - "modifiedRange": "[16,51 -> 16,51]" - }, - { - "originalRange": "[14,199 -> 14,200]", - "modifiedRange": "[16,52 -> 16,58]" - }, - { - "originalRange": "[14,201 -> 14,201]", - "modifiedRange": "[16,59 -> 16,63]" - }, - { - "originalRange": "[14,202 -> 14,202]", - "modifiedRange": "[16,64 -> 16,66]" - }, - { - "originalRange": "[14,203 -> 14,204]", - "modifiedRange": "[16,67 -> 16,70]" - }, - { - "originalRange": "[14,205 -> 14,205]", - "modifiedRange": "[16,71 -> 16,80]" - }, - { - "originalRange": "[14,206 -> 14,207]", - "modifiedRange": "[16,81 -> 16,83]" - }, - { - "originalRange": "[14,208 -> 14,208]", - "modifiedRange": "[16,84 -> 16,118]" - }, - { - "originalRange": "[14,210 -> 14,211]", - "modifiedRange": "[16,120 -> 17,1]" + "originalRange": "[14,196 -> 14,211]", + "modifiedRange": "[16,51 -> 17,1]" } ] }, @@ -215,164 +99,16 @@ "modifiedRange": "[21,74 -> 22,1]" }, { - "originalRange": "[18,3 -> 18,4]", - "modifiedRange": "[23,3 -> 23,6]" - }, - { - "originalRange": "[18,5 -> 18,9]", - "modifiedRange": "[23,7 -> 23,10]" - }, - { - "originalRange": "[18,10 -> 18,15]", - "modifiedRange": "[23,11 -> 23,13]" - }, - { - "originalRange": "[18,16 -> 18,19]", - "modifiedRange": "[23,14 -> 23,16]" - }, - { - "originalRange": "[18,20 -> 18,29]", - "modifiedRange": "[23,17 -> 23,20]" - }, - { - "originalRange": "[18,30 -> 18,31]", - "modifiedRange": "[23,21 -> 23,22]" - }, - { - "originalRange": "[18,32 -> 18,33]", - "modifiedRange": "[23,23 -> 23,23]" - }, - { - "originalRange": "[18,34 -> 19,4]", - "modifiedRange": "[23,24 -> 23,24]" - }, - { - "originalRange": "[19,5 -> 19,7]", - "modifiedRange": "[23,25 -> 23,25]" - }, - { - "originalRange": "[19,9 -> 19,13]", - "modifiedRange": "[23,27 -> 23,27]" - }, - { - "originalRange": "[19,14 -> 19,17]", - "modifiedRange": "[23,28 -> 23,29]" - }, - { - "originalRange": "[19,18 -> 19,26]", - "modifiedRange": "[23,30 -> 23,30]" + "originalRange": "[18,3 -> 19,26]", + "modifiedRange": "[23,3 -> 23,30]" }, { "originalRange": "[19,32 -> 19,32]", "modifiedRange": "[23,36 -> 23,56]" }, { - "originalRange": "[19,35 -> 20,4]", - "modifiedRange": "[23,59 -> 23,61]" - }, - { - "originalRange": "[20,5 -> 20,6]", - "modifiedRange": "[23,62 -> 23,65]" - }, - { - "originalRange": "[20,7 -> 20,9]", - "modifiedRange": "[23,66 -> 23,66]" - }, - { - "originalRange": "[20,10 -> 20,15]", - "modifiedRange": "[23,67 -> 23,67]" - }, - { - "originalRange": "[20,16 -> 20,17]", - "modifiedRange": "[23,68 -> 23,71]" - }, - { - "originalRange": "[20,18 -> 20,24]", - "modifiedRange": "[23,72 -> 23,72]" - }, - { - "originalRange": "[20,25 -> 20,29]", - "modifiedRange": "[23,73 -> 23,75]" - }, - { - "originalRange": "[20,30 -> 20,32]", - "modifiedRange": "[23,76 -> 23,78]" - }, - { - "originalRange": "[20,33 -> 20,35]", - "modifiedRange": "[23,79 -> 23,83]" - }, - { - "originalRange": "[20,36 -> 20,39]", - "modifiedRange": "[23,84 -> 23,84]" - }, - { - "originalRange": "[20,41 -> 20,44]", - "modifiedRange": "[23,86 -> 23,87]" - }, - { - "originalRange": "[20,45 -> 20,49]", - "modifiedRange": "[23,88 -> 23,89]" - }, - { - "originalRange": "[20,50 -> 20,51]", - "modifiedRange": "[23,90 -> 23,92]" - }, - { - "originalRange": "[20,52 -> 21,6]", - "modifiedRange": "[23,93 -> 23,96]" - }, - { - "originalRange": "[21,7 -> 21,9]", - "modifiedRange": "[23,97 -> 23,97]" - }, - { - "originalRange": "[21,10 -> 21,13]", - "modifiedRange": "[23,98 -> 23,98]" - }, - { - "originalRange": "[21,14 -> 21,25]", - "modifiedRange": "[23,99 -> 23,101]" - }, - { - "originalRange": "[21,26 -> 22,4]", - "modifiedRange": "[23,102 -> 23,102]" - }, - { - "originalRange": "[22,5 -> 22,8]", - "modifiedRange": "[23,103 -> 23,103]" - }, - { - "originalRange": "[22,9 -> 22,15]", - "modifiedRange": "[23,104 -> 23,107]" - }, - { - "originalRange": "[22,16 -> 22,18]", - "modifiedRange": "[23,108 -> 23,110]" - }, - { - "originalRange": "[22,19 -> 22,21]", - "modifiedRange": "[23,111 -> 23,111]" - }, - { - "originalRange": "[22,22 -> 22,26]", - "modifiedRange": "[23,112 -> 23,112]" - }, - { - "originalRange": "[22,27 -> 22,32]", - "modifiedRange": "[23,113 -> 23,113]" - }, - { - "originalRange": "[22,33 -> 22,36]", - "modifiedRange": "[23,114 -> 23,115]" - }, - { - "originalRange": "[22,37 -> 22,41]", - "modifiedRange": "[23,116 -> 23,117]" - }, - { - "originalRange": "[22,42 -> 23,4]", - "modifiedRange": "[23,118 -> 23,120]" + "originalRange": "[19,35 -> 23,4]", + "modifiedRange": "[23,59 -> 23,120]" } ] }, @@ -399,108 +135,20 @@ "modifiedRange": "[27,15 -> 27,16]" }, { - "originalRange": "[29,4 -> 29,7]", - "modifiedRange": "[28,4 -> 28,7]" - }, - { - "originalRange": "[29,8 -> 29,8]", - "modifiedRange": "[28,8 -> 28,18]" - }, - { - "originalRange": "[29,9 -> 29,10]", - "modifiedRange": "[28,19 -> 28,20]" - }, - { - "originalRange": "[29,11 -> 29,11]", - "modifiedRange": "[28,21 -> 28,47]" - }, - { - "originalRange": "[29,13 -> 29,14]", - "modifiedRange": "[28,49 -> 28,71]" - }, - { - "originalRange": "[29,15 -> 29,15]", - "modifiedRange": "[28,72 -> 28,76]" - }, - { - "originalRange": "[29,16 -> 29,16]", - "modifiedRange": "[28,77 -> 28,90]" - }, - { - "originalRange": "[29,17 -> 29,17]", - "modifiedRange": "[28,91 -> 28,94]" - }, - { - "originalRange": "[29,18 -> 29,18]", - "modifiedRange": "[28,95 -> 28,124]" - }, - { - "originalRange": "[29,19 -> 29,19]", - "modifiedRange": "[28,125 -> 28,129]" - }, - { - "originalRange": "[29,20 -> 29,20]", - "modifiedRange": "[28,130 -> 28,134]" - }, - { - "originalRange": "[29,21 -> 29,21]", - "modifiedRange": "[28,135 -> 28,176]" - }, - { - "originalRange": "[29,22 -> 29,22]", - "modifiedRange": "[28,177 -> 29,13]" - }, - { - "originalRange": "[29,24 -> 29,24]", - "modifiedRange": "[29,15 -> 29,36]" + "originalRange": "[29,4 -> 29,24]", + "modifiedRange": "[28,4 -> 29,36]" }, { "originalRange": "[30,4 -> 30,6]", "modifiedRange": "[30,4 -> 30,16]" }, { - "originalRange": "[30,10 -> 30,10]", - "modifiedRange": "[30,20 -> 30,21]" + "originalRange": "[30,10 -> 30,26]", + "modifiedRange": "[30,20 -> 34,16]" }, { - "originalRange": "[30,11 -> 30,13]", - "modifiedRange": "[30,22 -> 31,23]" - }, - { - "originalRange": "[30,14 -> 30,14]", - "modifiedRange": "[31,24 -> 33,10]" - }, - { - "originalRange": "[30,16 -> 30,17]", - "modifiedRange": "[33,12 -> 33,15]" - }, - { - "originalRange": "[30,18 -> 30,18]", - "modifiedRange": "[33,16 -> 33,19]" - }, - { - "originalRange": "[30,19 -> 30,19]", - "modifiedRange": "[33,20 -> 33,21]" - }, - { - "originalRange": "[30,20 -> 30,22]", - "modifiedRange": "[33,22 -> 33,22]" - }, - { - "originalRange": "[30,23 -> 30,23]", - "modifiedRange": "[33,23 -> 34,6]" - }, - { - "originalRange": "[30,24 -> 30,26]", - "modifiedRange": "[34,7 -> 34,16]" - }, - { - "originalRange": "[30,30 -> 30,30]", - "modifiedRange": "[34,20 -> 34,21]" - }, - { - "originalRange": "[30,31 -> 30,31]", - "modifiedRange": "[34,22 -> 37,9]" + "originalRange": "[30,30 -> 30,31]", + "modifiedRange": "[34,20 -> 37,9]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-confusing/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-confusing/experimental.expected.diff.json index ecd6a96cfcb..1004cf365ca 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-confusing/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-confusing/experimental.expected.diff.json @@ -17,40 +17,16 @@ "modifiedRange": "[10,12)", "innerChanges": [ { - "originalRange": "[10,11 -> 10,14]", - "modifiedRange": "[10,11 -> 10,17]" + "originalRange": "[10,11 -> 10,20]", + "modifiedRange": "[10,11 -> 10,19]" }, { - "originalRange": "[10,15 -> 10,20]", - "modifiedRange": "[10,18 -> 10,19]" + "originalRange": "[10,24 -> 10,31]", + "modifiedRange": "[10,23 -> 10,33]" }, { - "originalRange": "[10,24 -> 10,25]", - "modifiedRange": "[10,23 -> 10,25]" - }, - { - "originalRange": "[10,26 -> 10,27]", - "modifiedRange": "[10,26 -> 10,32]" - }, - { - "originalRange": "[10,28 -> 10,31]", - "modifiedRange": "[10,33 -> 10,33]" - }, - { - "originalRange": "[10,35 -> 10,36]", - "modifiedRange": "[10,37 -> 10,50]" - }, - { - "originalRange": "[10,37 -> 10,38]", - "modifiedRange": "[10,51 -> 10,72]" - }, - { - "originalRange": "[10,39 -> 10,40]", - "modifiedRange": "[10,73 -> 11,6]" - }, - { - "originalRange": "[10,42 -> 10,42]", - "modifiedRange": "[11,8 -> 11,18]" + "originalRange": "[10,35 -> 10,42]", + "modifiedRange": "[10,37 -> 11,18]" }, { "originalRange": "[10,72 -> 10,73]", @@ -63,44 +39,8 @@ "modifiedRange": "[19,20)", "innerChanges": [ { - "originalRange": "[18,50 -> 18,50]", - "modifiedRange": "[19,50 -> 19,53]" - }, - { - "originalRange": "[18,51 -> 18,52]", - "modifiedRange": "[19,54 -> 19,55]" - }, - { - "originalRange": "[18,53 -> 18,65]", - "modifiedRange": "[19,56 -> 19,56]" - }, - { - "originalRange": "[18,66 -> 18,70]", - "modifiedRange": "[19,57 -> 19,57]" - }, - { - "originalRange": "[18,72 -> 18,73]", - "modifiedRange": "[19,59 -> 19,61]" - }, - { - "originalRange": "[18,74 -> 18,76]", - "modifiedRange": "[19,62 -> 19,65]" - }, - { - "originalRange": "[18,77 -> 18,78]", - "modifiedRange": "[19,66 -> 19,66]" - }, - { - "originalRange": "[18,79 -> 18,85]", - "modifiedRange": "[19,67 -> 19,74]" - }, - { - "originalRange": "[18,86 -> 18,87]", - "modifiedRange": "[19,75 -> 19,81]" - }, - { - "originalRange": "[18,88 -> 18,91]", - "modifiedRange": "[19,82 -> 19,82]" + "originalRange": "[18,50 -> 18,91]", + "modifiedRange": "[19,50 -> 19,82]" }, { "originalRange": "[18,95 -> 18,107]", diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-example1/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-example1/experimental.expected.diff.json index efeb5e19806..d55f8972311 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-example1/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-example1/experimental.expected.diff.json @@ -25,200 +25,20 @@ "modifiedRange": "[17,80)", "innerChanges": [ { - "originalRange": "[13,10 -> 13,11]", - "modifiedRange": "[17,10 -> 17,20]" + "originalRange": "[13,10 -> 13,20]", + "modifiedRange": "[17,10 -> 21,62]" }, { - "originalRange": "[13,12 -> 13,12]", - "modifiedRange": "[17,21 -> 17,26]" + "originalRange": "[13,25 -> 13,41]", + "modifiedRange": "[21,67 -> 35,18]" }, { - "originalRange": "[13,13 -> 13,13]", - "modifiedRange": "[17,27 -> 17,61]" + "originalRange": "[14,2 -> 14,3]", + "modifiedRange": "[36,2 -> 39,3]" }, { - "originalRange": "[13,14 -> 13,14]", - "modifiedRange": "[17,62 -> 19,5]" - }, - { - "originalRange": "[13,15 -> 13,15]", - "modifiedRange": "[19,6 -> 19,34]" - }, - { - "originalRange": "[13,16 -> 13,16]", - "modifiedRange": "[19,35 -> 20,8]" - }, - { - "originalRange": "[13,17 -> 13,18]", - "modifiedRange": "[20,9 -> 21,18]" - }, - { - "originalRange": "[13,20 -> 13,20]", - "modifiedRange": "[21,20 -> 21,62]" - }, - { - "originalRange": "[13,25 -> 13,25]", - "modifiedRange": "[21,67 -> 21,74]" - }, - { - "originalRange": "[13,26 -> 13,26]", - "modifiedRange": "[21,75 -> 26,19]" - }, - { - "originalRange": "[13,28 -> 13,29]", - "modifiedRange": "[26,21 -> 27,37]" - }, - { - "originalRange": "[13,30 -> 13,30]", - "modifiedRange": "[27,38 -> 28,12]" - }, - { - "originalRange": "[13,31 -> 13,31]", - "modifiedRange": "[28,13 -> 29,3]" - }, - { - "originalRange": "[13,32 -> 13,32]", - "modifiedRange": "[29,4 -> 29,6]" - }, - { - "originalRange": "[13,33 -> 13,33]", - "modifiedRange": "[29,7 -> 30,6]" - }, - { - "originalRange": "[13,35 -> 13,37]", - "modifiedRange": "[30,8 -> 31,4]" - }, - { - "originalRange": "[13,38 -> 13,38]", - "modifiedRange": "[31,5 -> 31,6]" - }, - { - "originalRange": "[13,39 -> 13,39]", - "modifiedRange": "[31,7 -> 31,10]" - }, - { - "originalRange": "[13,40 -> 13,40]", - "modifiedRange": "[31,11 -> 34,50]" - }, - { - "originalRange": "[13,41 -> 13,41]", - "modifiedRange": "[34,51 -> 35,18]" - }, - { - "originalRange": "[14,2 -> 14,2]", - "modifiedRange": "[36,2 -> 36,7]" - }, - { - "originalRange": "[14,3 -> 14,3]", - "modifiedRange": "[36,8 -> 39,3]" - }, - { - "originalRange": "[14,13 -> 14,14]", - "modifiedRange": "[39,13 -> 40,4]" - }, - { - "originalRange": "[14,15 -> 14,15]", - "modifiedRange": "[40,5 -> 40,16]" - }, - { - "originalRange": "[14,16 -> 14,16]", - "modifiedRange": "[40,17 -> 42,3]" - }, - { - "originalRange": "[14,17 -> 14,17]", - "modifiedRange": "[42,4 -> 42,6]" - }, - { - "originalRange": "[14,18 -> 14,18]", - "modifiedRange": "[42,7 -> 44,12]" - }, - { - "originalRange": "[14,19 -> 14,19]", - "modifiedRange": "[44,13 -> 48,21]" - }, - { - "originalRange": "[14,20 -> 14,20]", - "modifiedRange": "[48,22 -> 48,28]" - }, - { - "originalRange": "[14,21 -> 14,21]", - "modifiedRange": "[48,29 -> 48,30]" - }, - { - "originalRange": "[14,22 -> 14,22]", - "modifiedRange": "[48,31 -> 48,43]" - }, - { - "originalRange": "[14,23 -> 14,24]", - "modifiedRange": "[48,44 -> 49,12]" - }, - { - "originalRange": "[14,26 -> 14,26]", - "modifiedRange": "[49,14 -> 51,20]" - }, - { - "originalRange": "[14,27 -> 14,27]", - "modifiedRange": "[51,21 -> 51,28]" - }, - { - "originalRange": "[14,28 -> 14,28]", - "modifiedRange": "[51,29 -> 51,60]" - }, - { - "originalRange": "[14,29 -> 14,29]", - "modifiedRange": "[51,61 -> 57,21]" - }, - { - "originalRange": "[14,30 -> 14,30]", - "modifiedRange": "[57,22 -> 58,5]" - }, - { - "originalRange": "[14,31 -> 14,31]", - "modifiedRange": "[58,6 -> 58,26]" - }, - { - "originalRange": "[14,32 -> 14,32]", - "modifiedRange": "[58,27 -> 58,28]" - }, - { - "originalRange": "[14,33 -> 14,33]", - "modifiedRange": "[58,29 -> 62,7]" - }, - { - "originalRange": "[14,34 -> 14,34]", - "modifiedRange": "[62,8 -> 63,27]" - }, - { - "originalRange": "[14,35 -> 14,35]", - "modifiedRange": "[63,28 -> 69,4]" - }, - { - "originalRange": "[14,36 -> 14,36]", - "modifiedRange": "[69,5 -> 69,17]" - }, - { - "originalRange": "[14,37 -> 14,37]", - "modifiedRange": "[69,18 -> 70,4]" - }, - { - "originalRange": "[14,38 -> 14,38]", - "modifiedRange": "[70,5 -> 70,11]" - }, - { - "originalRange": "[14,39 -> 14,39]", - "modifiedRange": "[70,12 -> 75,9]" - }, - { - "originalRange": "[14,40 -> 14,40]", - "modifiedRange": "[75,10 -> 75,13]" - }, - { - "originalRange": "[14,41 -> 14,42]", - "modifiedRange": "[75,14 -> 75,48]" - }, - { - "originalRange": "[14,43 -> 14,43]", - "modifiedRange": "[75,49 -> 79,2]" + "originalRange": "[14,13 -> 14,43]", + "modifiedRange": "[39,13 -> 79,2]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/experimental.expected.diff.json index 63bf0be0819..43782bc601f 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing/experimental.expected.diff.json @@ -17,12 +17,8 @@ "modifiedRange": "[31,32)", "innerChanges": [ { - "originalRange": "[32,59 -> 32,59]", - "modifiedRange": "[31,59 -> 31,60]" - }, - { - "originalRange": "[32,60 -> 32,60]", - "modifiedRange": "[31,61 -> 31,66]" + "originalRange": "[32,59 -> 32,60]", + "modifiedRange": "[31,59 -> 31,66]" } ] }, @@ -55,12 +51,8 @@ "modifiedRange": "[81,1 -> 82,1]" }, { - "originalRange": "[84,60 -> 84,60]", - "modifiedRange": "[82,60 -> 82,61]" - }, - { - "originalRange": "[84,61 -> 84,61]", - "modifiedRange": "[82,62 -> 82,67]" + "originalRange": "[84,60 -> 84,61]", + "modifiedRange": "[82,60 -> 82,67]" } ] }, @@ -73,12 +65,8 @@ "modifiedRange": "[93,1 -> 94,1]" }, { - "originalRange": "[95,60 -> 95,60]", - "modifiedRange": "[94,60 -> 94,61]" - }, - { - "originalRange": "[95,61 -> 95,61]", - "modifiedRange": "[94,62 -> 94,67]" + "originalRange": "[95,60 -> 95,61]", + "modifiedRange": "[94,60 -> 94,67]" } ] }, @@ -91,12 +79,8 @@ "modifiedRange": "[104,1 -> 105,1]" }, { - "originalRange": "[105,60 -> 105,60]", - "modifiedRange": "[105,60 -> 105,61]" - }, - { - "originalRange": "[105,61 -> 105,61]", - "modifiedRange": "[105,62 -> 105,67]" + "originalRange": "[105,60 -> 105,61]", + "modifiedRange": "[105,60 -> 105,67]" } ] } From 2b1ef23a319a258ab8caeee19df99a3d53a68eba Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Thu, 1 Dec 2022 19:47:50 +0100 Subject: [PATCH 3/4] Adjusts scoring function to prefer longer diagonals --- .../diff/algorithms/dynamicProgrammingDiffing.ts | 2 +- .../experimental.expected.diff.json | 12 ++++-------- .../ts-confusing/experimental.expected.diff.json | 12 ++++-------- .../ts-example2-ts/experimental.expected.diff.json | 12 ++++-------- 4 files changed, 13 insertions(+), 25 deletions(-) diff --git a/src/vs/editor/common/diff/algorithms/dynamicProgrammingDiffing.ts b/src/vs/editor/common/diff/algorithms/dynamicProgrammingDiffing.ts index c1df66a4974..ef264e21b2e 100644 --- a/src/vs/editor/common/diff/algorithms/dynamicProgrammingDiffing.ts +++ b/src/vs/editor/common/diff/algorithms/dynamicProgrammingDiffing.ts @@ -34,7 +34,7 @@ export class DynamicProgrammingDiffing implements IDiffAlgorithm { } if (s1 > 0 && s2 > 0 && directions.get(s1 - 1, s2 - 1) === 3) { // Prefer consecutive diagonals - extendedSeqScore += 0.1; + extendedSeqScore += lengths.get(s1 - 1, s2 - 1); } extendedSeqScore += (equalityScore ? equalityScore(s1, s2) : 1); } else { diff --git a/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/experimental.expected.diff.json index d7f36726db7..c0ce019463b 100644 --- a/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/penalize-fragmentation/experimental.expected.diff.json @@ -7,16 +7,12 @@ "modifiedRange": "[1,3)", "innerChanges": [ { - "originalRange": "[1,11 -> 1,20]", - "modifiedRange": "[1,11 -> 1,19]" + "originalRange": "[1,1 -> 1,1]", + "modifiedRange": "[1,1 -> 2,1]" }, { - "originalRange": "[1,24 -> 1,31]", - "modifiedRange": "[1,23 -> 1,33]" - }, - { - "originalRange": "[1,35 -> 1,42]", - "modifiedRange": "[1,37 -> 2,18]" + "originalRange": "[1,17 -> 1,41]", + "modifiedRange": "[2,17 -> 2,17]" }, { "originalRange": "[1,72 -> 1,73]", diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-confusing/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-confusing/experimental.expected.diff.json index 1004cf365ca..0845c2f7fe0 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-confusing/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-confusing/experimental.expected.diff.json @@ -17,16 +17,12 @@ "modifiedRange": "[10,12)", "innerChanges": [ { - "originalRange": "[10,11 -> 10,20]", - "modifiedRange": "[10,11 -> 10,19]" + "originalRange": "[10,1 -> 10,1]", + "modifiedRange": "[10,1 -> 11,1]" }, { - "originalRange": "[10,24 -> 10,31]", - "modifiedRange": "[10,23 -> 10,33]" - }, - { - "originalRange": "[10,35 -> 10,42]", - "modifiedRange": "[10,37 -> 11,18]" + "originalRange": "[10,17 -> 10,41]", + "modifiedRange": "[11,17 -> 11,17]" }, { "originalRange": "[10,72 -> 10,73]", diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/experimental.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/experimental.expected.diff.json index 12fb2fb68e1..a6bbd84c362 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/experimental.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/experimental.expected.diff.json @@ -11,16 +11,12 @@ "modifiedRange": "[6,10 -> 6,19]" }, { - "originalRange": "[6,33 -> 6,33]", - "modifiedRange": "[6,41 -> 7,12]" + "originalRange": "[6,33 -> 6,34]", + "modifiedRange": "[6,41 -> 6,50]" }, { - "originalRange": "[6,37 -> 6,37]", - "modifiedRange": "[7,16 -> 12,39]" - }, - { - "originalRange": "[6,46 -> 6,46]", - "modifiedRange": "[12,48 -> 16,35]" + "originalRange": "[7,1 -> 7,1]", + "modifiedRange": "[7,1 -> 17,1]" } ] }, From 060b6d8b4ae801d4af5c0e1f97850f89ba9a8cfc Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Fri, 2 Dec 2022 13:59:13 +0100 Subject: [PATCH 4/4] Fixes tests. --- .../editor/test/node/diffing/diffing.test.ts | 53 ++++++++++--------- .../random-match-1/smart.invalid.diff.json | 0 .../random-match-2/smart.invalid.diff.json | 0 .../random-match-3/smart.invalid.diff.json | 0 4 files changed, 28 insertions(+), 25 deletions(-) delete mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-1/smart.invalid.diff.json delete mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-2/smart.invalid.diff.json delete mode 100644 src/vs/editor/test/node/diffing/fixtures/random-match-3/smart.invalid.diff.json diff --git a/src/vs/editor/test/node/diffing/diffing.test.ts b/src/vs/editor/test/node/diffing/diffing.test.ts index 73bd0cc58af..eafdd623421 100644 --- a/src/vs/editor/test/node/diffing/diffing.test.ts +++ b/src/vs/editor/test/node/diffing/diffing.test.ts @@ -47,37 +47,44 @@ suite('diff fixtures', () => { const expectedFilePath = join(folderPath, `${diffingAlgoName}.expected.diff.json`); const invalidFilePath = join(folderPath, `${diffingAlgoName}.invalid.diff.json`); - const expectedFileContentFromActual = JSON.stringify(actualDiffingResult, null, '\t'); - - const invalidExists = existsSync(invalidFilePath); + const actualJsonStr = JSON.stringify(actualDiffingResult, null, '\t'); if (!existsSync(expectedFilePath)) { - // New test, create the files - writeFileSync(expectedFilePath, expectedFileContentFromActual); + // New test, create expected file + writeFileSync(expectedFilePath, actualJsonStr); + // Create invalid file so that this test fails on a re-run writeFileSync(invalidFilePath, ''); throw new Error('No expected file! Expected and invalid files were written. Delete the invalid file to make the test pass.'); + } if (existsSync(invalidFilePath)) { + const invalidJsonStr = readFileSync(invalidFilePath, 'utf8'); + if (invalidJsonStr === '') { + // Update expected file + writeFileSync(expectedFilePath, actualJsonStr); + throw new Error(`Delete the invalid ${invalidFilePath} file to make the test pass.`); + } else { + const expectedFileDiffResult: DiffingResult = JSON.parse(invalidJsonStr); + try { + assert.deepStrictEqual(actualDiffingResult, expectedFileDiffResult); + } catch (e) { + writeFileSync(expectedFilePath, actualJsonStr); + throw e; + } + // Test succeeded with the invalid file, restore expected file from invalid + writeFileSync(expectedFilePath, invalidJsonStr); + rmSync(invalidFilePath); + } } else { - const expectedFileContent = readFileSync(invalidExists ? invalidFilePath : expectedFilePath, 'utf8'); - + const expectedJsonStr = readFileSync(expectedFilePath, 'utf8'); + const expectedFileDiffResult: DiffingResult = JSON.parse(expectedJsonStr); try { - const expectedFileDiffResult: DiffingResult = JSON.parse(expectedFileContent); assert.deepStrictEqual(actualDiffingResult, expectedFileDiffResult); } catch (e) { - if (!invalidExists) { - writeFileSync(invalidFilePath, expectedFileContent); - } - writeFileSync(expectedFilePath, expectedFileContentFromActual); + // Backup expected file + writeFileSync(invalidFilePath, expectedJsonStr); + // Update expected file + writeFileSync(expectedFilePath, actualJsonStr); throw e; } - - if (invalidExists && expectedFileContent === '') { - throw new Error('Delete the invalid file to make the test pass.'); - } - writeFileSync(expectedFilePath, expectedFileContentFromActual); - } - - if (invalidExists) { - rmSync(invalidFilePath); } } @@ -88,10 +95,6 @@ suite('diff fixtures', () => { }); } } - - test(`debug`, () => { - runTest('intra-block-align', 'experimental'); - }); }); interface DiffingResult { diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-1/smart.invalid.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-1/smart.invalid.diff.json deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-2/smart.invalid.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-2/smart.invalid.diff.json deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-3/smart.invalid.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-3/smart.invalid.diff.json deleted file mode 100644 index e69de29bb2d..00000000000