Skip to content

Commit 205e4e5

Browse files
authored
1 parent 4a3c073 commit 205e4e5

File tree

7 files changed

+119
-3
lines changed

7 files changed

+119
-3
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ export function extendDiffsToEntireWordIfAppropriate(sequence1: LinesSliceCharSe
272272
}
273273

274274
if (equalChars1 + equalChars2 < (w.seq1Range.length + w.seq2Range.length) * 2 / 3) {
275-
additional.push(new SequenceDiff(w1, w2));
275+
additional.push(w);
276276
}
277277

278278
lastPoint = w.getEndExclusives();
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const deletedCodeLineBreaksComputer = !renderSideBySide ? this._editors.modified._getViewModel()?.createLineBreaksComputer() : undefined;
2+
if (deletedCodeLineBreaksComputer) {
3+
for (const a of alignmentsVal) {
4+
if (a.diff) {
5+
for (let i = a.originalRange.startLineNumber; i < a.originalRange.endLineNumberExclusive; i++) {
6+
deletedCodeLineBreaksComputer?.addRequest(this._editors.original.getModel()!.getLineContent(i), null, null);
7+
}
8+
}
9+
}
10+
}
11+
12+
const lineBreakData = deletedCodeLineBreaksComputer?.finalize() ?? [];
13+
let lineBreakDataIdx = 0;
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const deletedCodeLineBreaksComputer = !renderSideBySide ? this._editors.modified._getViewModel()?.createLineBreaksComputer() : undefined;
2+
if (deletedCodeLineBreaksComputer) {
3+
const originalModel = this._editors.original.getModel()!;
4+
for (const a of alignmentsVal) {
5+
if (a.diff) {
6+
for (let i = a.originalRange.startLineNumber; i < a.originalRange.endLineNumberExclusive; i++) {
7+
// `i` can be out of bound when the diff has not been updated yet.
8+
// In this case, we do an early return.
9+
// TODO@hediet: Fix this by applying the edit directly to the diff model, so that the diff is always valid.
10+
if (i > originalModel.getLineCount()) {
11+
return { orig: origViewZones, mod: modViewZones };
12+
}
13+
deletedCodeLineBreaksComputer?.addRequest(originalModel.getLineContent(i), null, null);
14+
}
15+
}
16+
}
17+
}
18+
19+
const lineBreakData = deletedCodeLineBreaksComputer?.finalize() ?? [];
20+
let lineBreakDataIdx = 0;
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{
2+
"original": {
3+
"content": "const deletedCodeLineBreaksComputer = !renderSideBySide ? this._editors.modified._getViewModel()?.createLineBreaksComputer() : undefined;\nif (deletedCodeLineBreaksComputer) {\n\tfor (const a of alignmentsVal) {\n\t\tif (a.diff) {\n\t\t\tfor (let i = a.originalRange.startLineNumber; i < a.originalRange.endLineNumberExclusive; i++) {\n\t\t\t\tdeletedCodeLineBreaksComputer?.addRequest(this._editors.original.getModel()!.getLineContent(i), null, null);\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst lineBreakData = deletedCodeLineBreaksComputer?.finalize() ?? [];\nlet lineBreakDataIdx = 0;",
4+
"fileName": "./1.tst"
5+
},
6+
"modified": {
7+
"content": "const deletedCodeLineBreaksComputer = !renderSideBySide ? this._editors.modified._getViewModel()?.createLineBreaksComputer() : undefined;\nif (deletedCodeLineBreaksComputer) {\n\tconst originalModel = this._editors.original.getModel()!;\n\tfor (const a of alignmentsVal) {\n\t\tif (a.diff) {\n\t\t\tfor (let i = a.originalRange.startLineNumber; i < a.originalRange.endLineNumberExclusive; i++) {\n\t\t\t\t// `i` can be out of bound when the diff has not been updated yet.\n\t\t\t\t// In this case, we do an early return.\n\t\t\t\t// TODO@hediet: Fix this by applying the edit directly to the diff model, so that the diff is always valid.\n\t\t\t\tif (i > originalModel.getLineCount()) {\n\t\t\t\t\treturn { orig: origViewZones, mod: modViewZones };\n\t\t\t\t}\n\t\t\t\tdeletedCodeLineBreaksComputer?.addRequest(originalModel.getLineContent(i), null, null);\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst lineBreakData = deletedCodeLineBreaksComputer?.finalize() ?? [];\nlet lineBreakDataIdx = 0;",
8+
"fileName": "./2.tst"
9+
},
10+
"diffs": [
11+
{
12+
"originalRange": "[3,3)",
13+
"modifiedRange": "[3,4)",
14+
"innerChanges": [
15+
{
16+
"originalRange": "[3,1 -> 3,1]",
17+
"modifiedRange": "[3,1 -> 4,1]"
18+
}
19+
]
20+
},
21+
{
22+
"originalRange": "[6,7)",
23+
"modifiedRange": "[7,14)",
24+
"innerChanges": [
25+
{
26+
"originalRange": "[6,1 -> 6,34]",
27+
"modifiedRange": "[7,1 -> 13,34]"
28+
},
29+
{
30+
"originalRange": "[6,47 -> 6,61]",
31+
"modifiedRange": "[13,47 -> 13,47]"
32+
},
33+
{
34+
"originalRange": "[6,69 -> 6,73]",
35+
"modifiedRange": "[13,55 -> 13,55]"
36+
},
37+
{
38+
"originalRange": "[6,78 -> 6,81]",
39+
"modifiedRange": "[13,60 -> 13,60]"
40+
}
41+
]
42+
}
43+
]
44+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"original": {
3+
"content": "const deletedCodeLineBreaksComputer = !renderSideBySide ? this._editors.modified._getViewModel()?.createLineBreaksComputer() : undefined;\nif (deletedCodeLineBreaksComputer) {\n\tfor (const a of alignmentsVal) {\n\t\tif (a.diff) {\n\t\t\tfor (let i = a.originalRange.startLineNumber; i < a.originalRange.endLineNumberExclusive; i++) {\n\t\t\t\tdeletedCodeLineBreaksComputer?.addRequest(this._editors.original.getModel()!.getLineContent(i), null, null);\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst lineBreakData = deletedCodeLineBreaksComputer?.finalize() ?? [];\nlet lineBreakDataIdx = 0;",
4+
"fileName": "./1.tst"
5+
},
6+
"modified": {
7+
"content": "const deletedCodeLineBreaksComputer = !renderSideBySide ? this._editors.modified._getViewModel()?.createLineBreaksComputer() : undefined;\nif (deletedCodeLineBreaksComputer) {\n\tconst originalModel = this._editors.original.getModel()!;\n\tfor (const a of alignmentsVal) {\n\t\tif (a.diff) {\n\t\t\tfor (let i = a.originalRange.startLineNumber; i < a.originalRange.endLineNumberExclusive; i++) {\n\t\t\t\t// `i` can be out of bound when the diff has not been updated yet.\n\t\t\t\t// In this case, we do an early return.\n\t\t\t\t// TODO@hediet: Fix this by applying the edit directly to the diff model, so that the diff is always valid.\n\t\t\t\tif (i > originalModel.getLineCount()) {\n\t\t\t\t\treturn { orig: origViewZones, mod: modViewZones };\n\t\t\t\t}\n\t\t\t\tdeletedCodeLineBreaksComputer?.addRequest(originalModel.getLineContent(i), null, null);\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst lineBreakData = deletedCodeLineBreaksComputer?.finalize() ?? [];\nlet lineBreakDataIdx = 0;",
8+
"fileName": "./2.tst"
9+
},
10+
"diffs": [
11+
{
12+
"originalRange": "[3,3)",
13+
"modifiedRange": "[3,4)",
14+
"innerChanges": null
15+
},
16+
{
17+
"originalRange": "[6,7)",
18+
"modifiedRange": "[7,14)",
19+
"innerChanges": [
20+
{
21+
"originalRange": "[6,1 -> 6,1]",
22+
"modifiedRange": "[7,1 -> 13,1]"
23+
},
24+
{
25+
"originalRange": "[6,47 -> 6,61]",
26+
"modifiedRange": "[13,47 -> 13,47]"
27+
},
28+
{
29+
"originalRange": "[6,69 -> 6,73]",
30+
"modifiedRange": "[13,55 -> 13,55]"
31+
},
32+
{
33+
"originalRange": "[6,78 -> 6,81]",
34+
"modifiedRange": "[13,60 -> 13,60]"
35+
}
36+
]
37+
}
38+
]
39+
}

src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/advanced.expected.diff.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
"modifiedRange": "[23,25)",
7676
"innerChanges": [
7777
{
78-
"originalRange": "[25,9 -> 26,13]",
78+
"originalRange": "[25,9 -> 26,18]",
7979
"modifiedRange": "[23,9 -> 23,18]"
8080
},
8181
{

src/vs/editor/test/node/diffing/fixtures/word-shared-letters/advanced.expected.diff.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112
"innerChanges": [
113113
{
114114
"originalRange": "[53,8 -> 53,17]",
115-
"modifiedRange": "[53,8 -> 53,28]"
115+
"modifiedRange": "[53,8 -> 53,31]"
116116
}
117117
]
118118
}

0 commit comments

Comments
 (0)