From 4728954baa48be22d107cb459fe291ec44e0f13a Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Tue, 5 Dec 2023 20:59:47 +0100 Subject: [PATCH] Fixes #178245 --- .../linesSliceCharSequence.ts | 6 ++++- .../advanced.expected.diff.json | 8 +++++-- .../fixtures/shifting-parameters/1.tst | 1 + .../fixtures/shifting-parameters/2.tst | 1 + .../advanced.expected.diff.json | 22 +++++++++++++++++++ .../legacy.expected.diff.json | 22 +++++++++++++++++++ 6 files changed, 57 insertions(+), 3 deletions(-) create mode 100644 src/vs/editor/test/node/diffing/fixtures/shifting-parameters/1.tst create mode 100644 src/vs/editor/test/node/diffing/fixtures/shifting-parameters/2.tst create mode 100644 src/vs/editor/test/node/diffing/fixtures/shifting-parameters/advanced.expected.diff.json create mode 100644 src/vs/editor/test/node/diffing/fixtures/shifting-parameters/legacy.expected.diff.json diff --git a/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts b/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts index fe408e95581..9edc63d335f 100644 --- a/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts +++ b/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts @@ -92,6 +92,10 @@ export class LinesSliceCharSequence implements ISequence { // don't break between \r and \n return 0; } + if (prevCategory === CharBoundaryCategory.LineBreakLF) { + // prefer the linebreak before the change + return 150; + } let score = 0; if (prevCategory !== nextCategory) { @@ -187,7 +191,7 @@ const score: Record = { [CharBoundaryCategory.WordNumber]: 0, [CharBoundaryCategory.End]: 10, [CharBoundaryCategory.Other]: 2, - [CharBoundaryCategory.Separator]: 3, + [CharBoundaryCategory.Separator]: 30, [CharBoundaryCategory.Space]: 3, [CharBoundaryCategory.LineBreakCR]: 10, [CharBoundaryCategory.LineBreakLF]: 10, diff --git a/src/vs/editor/test/node/diffing/fixtures/method-splitting/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/method-splitting/advanced.expected.diff.json index ca938c66689..b1de25a5907 100644 --- a/src/vs/editor/test/node/diffing/fixtures/method-splitting/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/method-splitting/advanced.expected.diff.json @@ -21,8 +21,12 @@ "modifiedRange": "[7,76 -> 7,80]" }, { - "originalRange": "[12,153 -> 12,155 EOL]", - "modifiedRange": "[7,157 -> 8,1 EOL]" + "originalRange": "[12,153 -> 12,153]", + "modifiedRange": "[7,157 -> 7,181]" + }, + { + "originalRange": "[13,1 -> 13,1]", + "modifiedRange": "[8,1 -> 9,1]" }, { "originalRange": "[13,31 -> 13,31]", diff --git a/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/1.tst b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/1.tst new file mode 100644 index 00000000000..4e4a1168350 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/1.tst @@ -0,0 +1 @@ +function x(alignments: RangeMapping[]): x[] { } diff --git a/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/2.tst b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/2.tst new file mode 100644 index 00000000000..3bdfadaa26c --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/2.tst @@ -0,0 +1 @@ +function x(alignments: RangeMapping[], originalLines: string[], modifiedLines: string[]): x[] { } diff --git a/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/advanced.expected.diff.json new file mode 100644 index 00000000000..3e860d858f8 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/advanced.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "function x(alignments: RangeMapping[]): x[] { }\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "function x(alignments: RangeMapping[], originalLines: string[], modifiedLines: string[]): x[] { }\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,2)", + "innerChanges": [ + { + "originalRange": "[1,38 -> 1,38]", + "modifiedRange": "[1,38 -> 1,88]" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/legacy.expected.diff.json new file mode 100644 index 00000000000..3e860d858f8 --- /dev/null +++ b/src/vs/editor/test/node/diffing/fixtures/shifting-parameters/legacy.expected.diff.json @@ -0,0 +1,22 @@ +{ + "original": { + "content": "function x(alignments: RangeMapping[]): x[] { }\n", + "fileName": "./1.tst" + }, + "modified": { + "content": "function x(alignments: RangeMapping[], originalLines: string[], modifiedLines: string[]): x[] { }\n", + "fileName": "./2.tst" + }, + "diffs": [ + { + "originalRange": "[1,2)", + "modifiedRange": "[1,2)", + "innerChanges": [ + { + "originalRange": "[1,38 -> 1,38]", + "modifiedRange": "[1,38 -> 1,88]" + } + ] + } + ] +} \ No newline at end of file