Merge pull request #165147 from microsoft/hediet/integrated-mule

Implements diffing fixture tests. Fixes #165041
This commit is contained in:
Henning Dieterichs
2022-11-16 09:54:36 +01:00
committed by GitHub
120 changed files with 5311 additions and 6 deletions
+4 -2
View File
@@ -12,7 +12,8 @@
}
},
"files.associations": {
"cglicenses.json": "jsonc"
"cglicenses.json": "jsonc",
"*.tst": "typescript"
},
"search.exclude": {
"**/node_modules": true,
@@ -27,7 +28,8 @@
"test/automation/out/**": true,
"test/integration/browser/out/**": true,
"src/vs/base/test/node/uri.test.data.txt": true,
"src/vs/workbench/api/test/browser/extHostDocumentData.test.perf-data.ts": true
"src/vs/workbench/api/test/browser/extHostDocumentData.test.perf-data.ts": true,
"src/vs/editor/test/node/diffing/fixtures/**": true,
},
"lcov.path": [
"./.build/coverage/lcov.info",
@@ -85,11 +85,11 @@ export function shiftSequenceDiffs(sequence1: ISequence, sequence2: ISequence, s
const diff = sequenceDiffs[i];
if (diff.seq1Range.isEmpty) {
const seq2PrevEndExclusive = (i > 0 ? sequenceDiffs[i - 1].seq2Range.endExclusive : -1);
const seq2NextStart = (i + 1 < sequenceDiffs.length ? sequenceDiffs[i + 1].seq2Range.start : sequence2.length + 1);
const seq2NextStart = (i + 1 < sequenceDiffs.length ? sequenceDiffs[i + 1].seq2Range.start : sequence2.length);
sequenceDiffs[i] = shiftDiffToBetterPosition(diff, sequence1, sequence2, seq2NextStart, seq2PrevEndExclusive);
} else if (diff.seq2Range.isEmpty) {
const seq1PrevEndExclusive = (i > 0 ? sequenceDiffs[i - 1].seq1Range.endExclusive : -1);
const seq1NextStart = (i + 1 < sequenceDiffs.length ? sequenceDiffs[i + 1].seq1Range.start : sequence1.length + 1);
const seq1NextStart = (i + 1 < sequenceDiffs.length ? sequenceDiffs[i + 1].seq1Range.start : sequence1.length);
sequenceDiffs[i] = shiftDiffToBetterPosition(diff.reverse(), sequence2, sequence1, seq1NextStart, seq1PrevEndExclusive).reverse();
}
}
@@ -102,7 +102,7 @@ function shiftDiffToBetterPosition(diff: SequenceDiff, sequence1: ISequence, seq
// don't touch previous or next!
let deltaBefore = 1;
while (diff.seq1Range.start - deltaBefore > seq2PrevEndExclusive &&
while (diff.seq2Range.start - deltaBefore > seq2PrevEndExclusive &&
sequence2.getElement(diff.seq2Range.start - deltaBefore) ===
sequence2.getElement(diff.seq2Range.endExclusive - deltaBefore) && deltaBefore < maxShiftLimit) {
deltaBefore++;
@@ -110,7 +110,7 @@ function shiftDiffToBetterPosition(diff: SequenceDiff, sequence1: ISequence, seq
deltaBefore--;
let deltaAfter = 1;
while (diff.seq1Range.start + deltaAfter < seq2NextStart &&
while (diff.seq2Range.start + deltaAfter < seq2NextStart &&
sequence2.getElement(diff.seq2Range.start + deltaAfter) ===
sequence2.getElement(diff.seq2Range.endExclusive + deltaAfter) && deltaAfter < maxShiftLimit) {
deltaAfter++;
+10
View File
@@ -0,0 +1,10 @@
# Diffing Fixture Tests
Every folder in `fixtures` represents a test.
The file that starts with `1.` is diffed against the file that starts with `2.`. Use `tst` instead of `ts` to avoid compiler/linter errors for typescript diff files.
* Missing `*.expected.diff.json` are created automatically (as well as an `*.invalid.diff.json` file).
* If the actual diff does not equal the expected diff, the expected file is updated automatically. The previous value of the expected file is written to `*.invalid.diff.json`.
* The test will fail if there are any `*.invalid.diff.json` files. This makes sure that the test keeps failing even if it is run a second time.
When changing the diffing algorithm, run the fixture tests, review the diff of the `*.expected.diff.json` files and delete all `*.invalid.diff.json` files.
@@ -0,0 +1,99 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import assert = require('assert');
import { readdirSync, readFileSync, existsSync, writeFileSync } from 'fs';
import { join, resolve } from 'path';
import { FileAccess } from 'vs/base/common/network';
import { SmartLinesDiffComputer } from 'vs/editor/common/diff/smartLinesDiffComputer';
import { StandardLinesDiffComputer } from 'vs/editor/common/diff/standardLinesDiffComputer';
suite('diff fixtures', () => {
const fixturesOutDir = FileAccess.asFileUri('vs/editor/test/node/diffing/fixtures').fsPath;
// We want the dir in src, so we can directly update the source files if they disagree and create invalid files to capture the previous state.
// This makes it very easy to update the fixtures.
const fixturesSrcDir = resolve(fixturesOutDir).replaceAll('\\', '/').replace('/out/vs/editor/', '/src/vs/editor/');
const folders = readdirSync(fixturesSrcDir);
for (const folder of folders) {
for (const diffingAlgoName of ['smart', 'experimental']) {
test(`${folder}-${diffingAlgoName}`, () => {
const folderPath = join(fixturesSrcDir, folder);
const files = readdirSync(folderPath);
const firstFileName = files.find(f => f.startsWith('1.'))!;
const secondFileName = files.find(f => f.startsWith('2.'))!;
const firstContentLines = readFileSync(join(folderPath, firstFileName), 'utf8').split(/\r\n|\r|\n/);
const secondContentLines = readFileSync(join(folderPath, secondFileName), 'utf8').split(/\r\n|\r|\n/);
const diffingAlgo = diffingAlgoName === 'smart' ? new SmartLinesDiffComputer() : new StandardLinesDiffComputer();
const diff = diffingAlgo.computeDiff(firstContentLines, secondContentLines, { ignoreTrimWhitespace: false, maxComputationTime: Number.MAX_SAFE_INTEGER });
const actualDiffingResult: DiffingResult = {
originalFileName: `./${firstFileName}`,
modifiedFileName: `./${secondFileName}`,
diffs: diff.changes.map<IDetailedDiff>(c => ({
originalRange: c.originalRange.toString(),
modifiedRange: c.modifiedRange.toString(),
innerChanges: c.innerChanges?.map<IDiff>(c => ({
originalRange: c.originalRange.toString(),
modifiedRange: c.modifiedRange.toString(),
})) || null
}))
};
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);
if (!existsSync(expectedFilePath)) {
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');
const expectedFileDiffResult: DiffingResult = JSON.parse(expectedFileContent);
try {
assert.deepStrictEqual(actualDiffingResult, expectedFileDiffResult);
} catch (e) {
if (!invalidExists) {
writeFileSync(invalidFilePath, expectedFileContent);
}
writeFileSync(expectedFilePath, expectedFileContentFromActual);
throw e;
}
}
if (invalidExists) {
throw new Error('Invalid file exists and agrees with expected file! Delete the invalid file to make the test pass.');
}
});
}
}
});
interface DiffingResult {
originalFileName: string;
modifiedFileName: string;
diffs: IDetailedDiff[];
}
interface IDetailedDiff {
originalRange: string; // [startLineNumber, endLineNumberExclusive)
modifiedRange: string; // [startLineNumber, endLineNumberExclusive)
innerChanges: IDiff[] | null;
}
interface IDiff {
originalRange: string; // [1,18 -> 1,19]
modifiedRange: string; // [1,18 -> 1,19]
}
@@ -0,0 +1,131 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { CompareResult } from 'vs/base/common/arrays';
import { autorun, derived } from 'vs/base/common/observable';
import { IModelDeltaDecoration, MinimapPosition, OverviewRulerLane } from 'vs/editor/common/model';
import { localize } from 'vs/nls';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { LineRange } from 'vs/workbench/contrib/mergeEditor/browser/model/lineRange';
import { applyObservableDecorations, join } from 'vs/workbench/contrib/mergeEditor/browser/utils';
import { handledConflictMinimapOverViewRulerColor, unhandledConflictMinimapOverViewRulerColor } from 'vs/workbench/contrib/mergeEditor/browser/view/colors';
import { CodeEditorView } from './codeEditorView';
export class ResultCodeEditorView extends CodeEditorView {
private readonly decorations = derived('result.decorations', reader => {
const viewModel = this.viewModel.read(reader);
if (!viewModel) {
return [];
}
const model = viewModel.model;
const result = new Array<IModelDeltaDecoration>();
const baseRangeWithStoreAndTouchingDiffs = join(
model.modifiedBaseRanges.read(reader),
model.resultDiffs.read(reader),
(baseRange, diff) => baseRange.baseRange.touches(diff.inputRange)
? CompareResult.neitherLessOrGreaterThan
: LineRange.compareByStart(
baseRange.baseRange,
diff.inputRange
)
);
const activeModifiedBaseRange = viewModel.activeModifiedBaseRange.read(reader);
for (const m of baseRangeWithStoreAndTouchingDiffs) {
const modifiedBaseRange = m.left;
if (modifiedBaseRange) {
const range = model.getRangeInResult(modifiedBaseRange.baseRange, reader).toInclusiveRange();
if (range) {
const blockClassNames = ['merge-editor-block'];
const isHandled = model.isHandled(modifiedBaseRange).read(reader);
if (isHandled) {
blockClassNames.push('handled');
}
if (modifiedBaseRange === activeModifiedBaseRange) {
blockClassNames.push('focused');
}
blockClassNames.push('result');
result.push({
range,
options: {
isWholeLine: true,
blockClassName: blockClassNames.join(' '),
description: 'Result Diff',
minimap: {
position: MinimapPosition.Gutter,
color: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },
},
overviewRuler: {
position: OverviewRulerLane.Center,
color: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },
}
}
});
}
}
for (const diff of m.rights) {
const range = diff.outputRange.toInclusiveRange();
if (range) {
result.push({
range,
options: {
className: `merge-editor-diff result`,
description: 'Merge Editor',
isWholeLine: true,
}
});
}
if (diff.rangeMappings) {
for (const d of diff.rangeMappings) {
result.push({
range: d.outputRange,
options: {
className: `merge-editor-diff-word result`,
description: 'Merge Editor'
}
});
}
}
}
}
return result;
});
constructor(
@IInstantiationService instantiationService: IInstantiationService
) {
super(instantiationService);
this._register(applyObservableDecorations(this.editor, this.decorations));
this._register(autorun('update remainingConflicts label', reader => {
const model = this.model.read(reader);
if (!model) {
return;
}
const count = model.unhandledConflictsCount.read(reader);
this.htmlElements.detail.innerText = count === 1
? localize(
'mergeEditor.remainingConflicts',
'{0} Conflict Remaining',
count
)
: localize(
'mergeEditor.remainingConflict',
'{0} Conflicts Remaining ',
count
);
}));
}
}
@@ -0,0 +1,134 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { CompareResult } from 'vs/base/common/arrays';
import { autorun, derived } from 'vs/base/common/observable';
import { IModelDeltaDecoration, MinimapPosition, OverviewRulerLane } from 'vs/editor/common/model';
import { localize } from 'vs/nls';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { LineRange } from 'vs/workbench/contrib/mergeEditor/browser/model/lineRange';
import { applyObservableDecorations, join } from 'vs/workbench/contrib/mergeEditor/browser/utils';
import { handledConflictMinimapOverViewRulerColor, unhandledConflictMinimapOverViewRulerColor } from 'vs/workbench/contrib/mergeEditor/browser/view/colors';
import { CodeEditorView } from './codeEditorView';
export class ResultCodeEditorView extends CodeEditorView {
private readonly decorations = derived('result.decorations', reader => {
const viewModel = this.viewModel.read(reader);
if (!viewModel) {
return [];
}
const model = viewModel.model;
const result = new Array<IModelDeltaDecoration>();
const baseRangeWithStoreAndTouchingDiffs = join(
model.modifiedBaseRanges.read(reader),
model.resultDiffs.read(reader),
(baseRange, diff) => baseRange.baseRange.touches(diff.inputRange)
? CompareResult.neitherLessOrGreaterThan
: LineRange.compareByStart(
baseRange.baseRange,
diff.inputRange
)
);
const activeModifiedBaseRange = viewModel.activeModifiedBaseRange.read(reader);
for (const m of baseRangeWithStoreAndTouchingDiffs) {
const modifiedBaseRange = m.left;
if (modifiedBaseRange) {
const range = model.getRangeInResult(modifiedBaseRange.baseRange, reader).toInclusiveRange();
if (range) {
const blockClassNames = ['merge-editor-block'];
const isHandled = model.isHandled(modifiedBaseRange).read(reader);
if (isHandled) {
blockClassNames.push('handled');
}
if (modifiedBaseRange === activeModifiedBaseRange) {
blockClassNames.push('focused');
}
blockClassNames.push('result');
result.push({
range,
options: {
isWholeLine: true,
blockClassName: blockClassNames.join(' '),
description: 'Result Diff',
minimap: {
position: MinimapPosition.Gutter,
color: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },
},
overviewRuler: {
position: OverviewRulerLane.Center,
color: { id: isHandled ? handledConflictMinimapOverViewRulerColor : unhandledConflictMinimapOverViewRulerColor },
}
}
});
}
}
if (!modifiedBaseRange || modifiedBaseRange.isConflicting) {
for (const diff of m.rights) {
const range = diff.outputRange.toInclusiveRange();
if (range) {
result.push({
range,
options: {
className: `merge-editor-diff result`,
description: 'Merge Editor',
isWholeLine: true,
}
});
}
if (diff.rangeMappings) {
for (const d of diff.rangeMappings) {
result.push({
range: d.outputRange,
options: {
className: `merge-editor-diff-word result`,
description: 'Merge Editor'
}
});
}
}
}
}
}
return result;
});
constructor(
@IInstantiationService instantiationService: IInstantiationService
) {
super(instantiationService);
this._register(applyObservableDecorations(this.editor, this.decorations));
this._register(autorun('update remainingConflicts label', reader => {
const model = this.model.read(reader);
if (!model) {
return;
}
const count = model.unhandledConflictsCount.read(reader);
this.htmlElements.detail.innerText = count === 1
? localize(
'mergeEditor.remainingConflicts',
'{0} Conflict Remaining',
count
)
: localize(
'mergeEditor.remainingConflict',
'{0} Conflicts Remaining ',
count
);
}));
}
}
@@ -0,0 +1,122 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[73,85)",
"modifiedRange": "[73,87)",
"innerChanges": [
{
"originalRange": "[73,1 -> 73,1]",
"modifiedRange": "[73,1 -> 75,1]"
},
{
"originalRange": "[73,1 -> 73,1]",
"modifiedRange": "[75,1 -> 75,2]"
},
{
"originalRange": "[74,1 -> 74,1]",
"modifiedRange": "[76,1 -> 76,2]"
},
{
"originalRange": "[75,1 -> 75,1]",
"modifiedRange": "[77,1 -> 77,2]"
},
{
"originalRange": "[76,1 -> 76,1]",
"modifiedRange": "[78,1 -> 78,2]"
},
{
"originalRange": "[77,1 -> 77,1]",
"modifiedRange": "[79,1 -> 79,2]"
},
{
"originalRange": "[78,1 -> 78,1]",
"modifiedRange": "[80,1 -> 80,2]"
},
{
"originalRange": "[79,1 -> 79,1]",
"modifiedRange": "[81,1 -> 81,2]"
},
{
"originalRange": "[80,1 -> 80,1]",
"modifiedRange": "[82,1 -> 82,2]"
},
{
"originalRange": "[81,1 -> 81,1]",
"modifiedRange": "[83,1 -> 83,2]"
},
{
"originalRange": "[82,1 -> 82,1]",
"modifiedRange": "[84,1 -> 84,2]"
},
{
"originalRange": "[83,1 -> 83,1]",
"modifiedRange": "[85,1 -> 85,2]"
},
{
"originalRange": "[84,1 -> 84,1]",
"modifiedRange": "[86,1 -> 86,2]"
}
]
},
{
"originalRange": "[86,98)",
"modifiedRange": "[88,101)",
"innerChanges": [
{
"originalRange": "[86,1 -> 86,1]",
"modifiedRange": "[88,1 -> 88,2]"
},
{
"originalRange": "[87,1 -> 87,1]",
"modifiedRange": "[89,1 -> 89,2]"
},
{
"originalRange": "[88,1 -> 88,1]",
"modifiedRange": "[90,1 -> 90,2]"
},
{
"originalRange": "[89,1 -> 89,1]",
"modifiedRange": "[91,1 -> 91,2]"
},
{
"originalRange": "[90,1 -> 90,1]",
"modifiedRange": "[92,1 -> 92,2]"
},
{
"originalRange": "[91,1 -> 91,1]",
"modifiedRange": "[93,1 -> 93,2]"
},
{
"originalRange": "[92,1 -> 92,1]",
"modifiedRange": "[94,1 -> 94,2]"
},
{
"originalRange": "[93,1 -> 93,1]",
"modifiedRange": "[95,1 -> 95,2]"
},
{
"originalRange": "[94,1 -> 94,1]",
"modifiedRange": "[96,1 -> 96,2]"
},
{
"originalRange": "[95,1 -> 95,1]",
"modifiedRange": "[97,1 -> 97,2]"
},
{
"originalRange": "[96,1 -> 96,1]",
"modifiedRange": "[98,1 -> 98,2]"
},
{
"originalRange": "[97,1 -> 97,1]",
"modifiedRange": "[99,1 -> 99,2]"
},
{
"originalRange": "[98,1 -> 98,1]",
"modifiedRange": "[100,1 -> 101,1]"
}
]
}
]
}
@@ -0,0 +1,16 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[73,85)",
"modifiedRange": "[73,87)",
"innerChanges": null
},
{
"originalRange": "[86,95)",
"modifiedRange": "[88,98)",
"innerChanges": null
}
]
}
@@ -0,0 +1,8 @@
console.log(1)
console.log(2)
console.log(3)
console.log(4)
console.log(5)
console.log(6)
console.log(7)
@@ -0,0 +1,9 @@
console.log(1);
console.log(2);
console.log(3);
console.log(4);
console.log(5);
console.log(6);
console.log(7);
@@ -0,0 +1,26 @@
{
"originalFileName": "./1.txt",
"modifiedFileName": "./2.txt",
"diffs": [
{
"originalRange": "[1,1)",
"modifiedRange": "[1,9)",
"innerChanges": [
{
"originalRange": "[1,1 -> 1,1]",
"modifiedRange": "[1,1 -> 9,1]"
}
]
},
{
"originalRange": "[2,9)",
"modifiedRange": "[10,10)",
"innerChanges": [
{
"originalRange": "[2,1 -> 9,1]",
"modifiedRange": "[10,1 -> 10,1]"
}
]
}
]
}
@@ -0,0 +1,16 @@
{
"originalFileName": "./1.txt",
"modifiedFileName": "./2.txt",
"diffs": [
{
"originalRange": "[1,1)",
"modifiedRange": "[1,9)",
"innerChanges": null
},
{
"originalRange": "[2,9)",
"modifiedRange": "[10,10)",
"innerChanges": null
}
]
}
@@ -0,0 +1,36 @@
export function lineRangeMappingFromRangeMappings(alignments: RangeMapping[]): LineRangeMapping[] {
const changes: LineRangeMapping[] = [];
for (const g of group(
alignments,
(a1, a2) =>
(a2.originalRange.startLineNumber - (a1.originalRange.endLineNumber - (a1.originalRange.endColumn > 1 ? 0 : 1)) <= 1)
|| (a2.modifiedRange.startLineNumber - (a1.modifiedRange.endLineNumber - (a1.modifiedRange.endColumn > 1 ? 0 : 1)) <= 1)
)) {
const first = g[0];
const last = g[g.length - 1];
changes.push(new LineRangeMapping(
new LineRange(
first.originalRange.startLineNumber,
last.originalRange.endLineNumber + (last.originalRange.endColumn > 1 || last.modifiedRange.endColumn > 1 ? 1 : 0)
),
new LineRange(
first.modifiedRange.startLineNumber,
last.modifiedRange.endLineNumber + (last.originalRange.endColumn > 1 || last.modifiedRange.endColumn > 1 ? 1 : 0)
),
g
));
}
assertFn(() => {
return checkAdjacentItems(changes,
(m1, m2) => m2.originalRange.startLineNumber - m1.originalRange.endLineNumberExclusive === m2.modifiedRange.startLineNumber - m1.modifiedRange.endLineNumberExclusive &&
// There has to be an unchanged line in between (otherwise both diffs should have been joined)
m1.originalRange.endLineNumberExclusive < m2.originalRange.startLineNumber &&
m1.modifiedRange.endLineNumberExclusive < m2.modifiedRange.startLineNumber,
);
});
return changes;
}
@@ -0,0 +1,38 @@
export function lineRangeMappingFromRangeMappings(alignments: RangeMapping[]): LineRangeMapping[] {
const changes: LineRangeMapping[] = [];
for (const g of group(
alignments,
(a1, a2) =>
(a2.originalRange.startLineNumber - (a1.originalRange.endLineNumber - (a1.originalRange.endColumn > 1 ? 0 : 1)) <= 1)
|| (a2.modifiedRange.startLineNumber - (a1.modifiedRange.endLineNumber - (a1.modifiedRange.endColumn > 1 ? 0 : 1)) <= 1)
)) {
if (true) {
const first = g[0];
const last = g[g.length - 1];
changes.push(new LineRangeMapping(
new LineRange(
first.originalRange.startLineNumber,
last.originalRange.endLineNumber + (last.originalRange.endColumn > 1 || last.modifiedRange.endColumn > 1 ? 1 : 0)
),
new LineRange(
first.modifiedRange.startLineNumber,
last.modifiedRange.endLineNumber + (last.originalRange.endColumn > 1 || last.modifiedRange.endColumn > 1 ? 1 : 0)
),
g
));
}
}
assertFn(() => {
return checkAdjacentItems(changes,
(m1, m2) => m2.originalRange.startLineNumber - m1.originalRange.endLineNumberExclusive === m2.modifiedRange.startLineNumber - m1.modifiedRange.endLineNumberExclusive &&
// There has to be an unchanged line in between (otherwise both diffs should have been joined)
m1.originalRange.endLineNumberExclusive < m2.originalRange.startLineNumber &&
m1.modifiedRange.endLineNumberExclusive < m2.modifiedRange.startLineNumber,
);
});
return changes;
}
@@ -0,0 +1,78 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[9,11)",
"modifiedRange": "[9,12)",
"innerChanges": [
{
"originalRange": "[9,1 -> 9,1]",
"modifiedRange": "[9,1 -> 10,1]"
},
{
"originalRange": "[9,1 -> 9,1]",
"modifiedRange": "[10,1 -> 10,2]"
},
{
"originalRange": "[10,1 -> 10,1]",
"modifiedRange": "[11,1 -> 11,2]"
}
]
},
{
"originalRange": "[12,23)",
"modifiedRange": "[13,25)",
"innerChanges": [
{
"originalRange": "[12,1 -> 12,1]",
"modifiedRange": "[13,1 -> 13,2]"
},
{
"originalRange": "[13,1 -> 13,1]",
"modifiedRange": "[14,1 -> 14,2]"
},
{
"originalRange": "[14,1 -> 14,1]",
"modifiedRange": "[15,1 -> 15,2]"
},
{
"originalRange": "[15,1 -> 15,1]",
"modifiedRange": "[16,1 -> 16,2]"
},
{
"originalRange": "[16,1 -> 16,1]",
"modifiedRange": "[17,1 -> 17,2]"
},
{
"originalRange": "[17,1 -> 17,1]",
"modifiedRange": "[18,1 -> 18,2]"
},
{
"originalRange": "[18,1 -> 18,1]",
"modifiedRange": "[19,1 -> 19,2]"
},
{
"originalRange": "[19,1 -> 19,1]",
"modifiedRange": "[20,1 -> 20,2]"
},
{
"originalRange": "[20,1 -> 20,1]",
"modifiedRange": "[21,1 -> 21,2]"
},
{
"originalRange": "[21,1 -> 21,1]",
"modifiedRange": "[22,1 -> 22,2]"
},
{
"originalRange": "[22,1 -> 22,1]",
"modifiedRange": "[23,1 -> 23,2]"
},
{
"originalRange": "[23,1 -> 23,1]",
"modifiedRange": "[24,1 -> 25,1]"
}
]
}
]
}
@@ -0,0 +1,16 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[9,11)",
"modifiedRange": "[9,12)",
"innerChanges": null
},
{
"originalRange": "[12,23)",
"modifiedRange": "[13,25)",
"innerChanges": null
}
]
}
@@ -0,0 +1,4 @@
console.log(1);
console.log(2);
console.log(3);
console.log(4);
@@ -0,0 +1,3 @@
console.log(1)
console.log(2)
console.log(4)
@@ -0,0 +1,24 @@
{
"originalFileName": "./1.txt",
"modifiedFileName": "./2.txt",
"diffs": [
{
"originalRange": "[1,5)",
"modifiedRange": "[1,4)",
"innerChanges": [
{
"originalRange": "[1,15 -> 1,16]",
"modifiedRange": "[1,15 -> 1,15]"
},
{
"originalRange": "[2,15 -> 3,16]",
"modifiedRange": "[2,15 -> 2,15]"
},
{
"originalRange": "[4,15 -> 4,16]",
"modifiedRange": "[3,15 -> 3,15]"
}
]
}
]
}
@@ -0,0 +1,24 @@
{
"originalFileName": "./1.txt",
"modifiedFileName": "./2.txt",
"diffs": [
{
"originalRange": "[1,5)",
"modifiedRange": "[1,4)",
"innerChanges": [
{
"originalRange": "[1,15 -> 1,16]",
"modifiedRange": "[1,15 -> 1,15]"
},
{
"originalRange": "[2,15 -> 3,16]",
"modifiedRange": "[2,15 -> 2,15]"
},
{
"originalRange": "[4,15 -> 4,16]",
"modifiedRange": "[3,15 -> 3,15]"
}
]
}
]
}
@@ -0,0 +1,478 @@
{
"editor": [
{
"name": "vs/platform",
"project": "vscode-editor"
},
{
"name": "vs/editor/contrib",
"project": "vscode-editor"
},
{
"name": "vs/editor",
"project": "vscode-editor"
},
{
"name": "vs/base",
"project": "vscode-editor"
}
],
"workbench": [
{
"name": "vs/code",
"project": "vscode-workbench"
},
{
"name": "vs/workbench",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/api/common",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/bulkEdit",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/cli",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/codeEditor",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/callHierarchy",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/typeHierarchy",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/codeActions",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/comments",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/debug",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/dialogs",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/emmet",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/experiments",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/extensions",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/externalTerminal",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/feedback",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/files",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/html",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/issue",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/inlayHints",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/interactive",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/languageStatus",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/keybindings",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/markers",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/mergeEditor",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/localization",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/logs",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/output",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/performance",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/preferences",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/notebook",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/quickaccess",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/userData",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/remote",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/relauncher",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/sash",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/scm",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/search",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/searchEditor",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/snippets",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/format",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/tags",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/surveys",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/tasks",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/testing",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/terminal",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/themes",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/trust",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/update",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/url",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/watermark",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/webview",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/webviewPanel",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/workspace",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/workspaces",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/customEditor",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/externalUriOpener",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/welcomeGettingStarted",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/welcomeOverlay",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/welcomePage",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/welcomeViews",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/welcomeWalkthrough",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/outline",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/userDataSync",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/editSessions",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/views",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/languageDetection",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/audioCues",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/deprecatedExtensionMigrator",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/offline",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/actions",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/authToken",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/backup",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/bulkEdit",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/clipboard",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/commands",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/configuration",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/configurationResolver",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/dialogs",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/editor",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/extensions",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/extensionManagement",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/files",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/history",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/log",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/integrity",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/keybinding",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/lifecycle",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/language",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/progress",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/remote",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/search",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/textfile",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/themes",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/textMate",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/workingCopy",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/workspaces",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/decorations",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/label",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/preferences",
"project": "vscode-preferences"
},
{
"name": "vs/workbench/services/notification",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/userData",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/userDataSync",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/editSessions",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/views",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/timeline",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/localHistory",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/authentication",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/extensionRecommendations",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/gettingStarted",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/host",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/userDataProfile",
"project": "vscode-profiles"
},
{
"name": "vs/workbench/services/userDataProfile",
"project": "vscode-profiles"
}
]
}
@@ -0,0 +1,482 @@
{
"editor": [
{
"name": "vs/platform",
"project": "vscode-editor"
},
{
"name": "vs/editor/contrib",
"project": "vscode-editor"
},
{
"name": "vs/editor",
"project": "vscode-editor"
},
{
"name": "vs/base",
"project": "vscode-editor"
}
],
"workbench": [
{
"name": "vs/code",
"project": "vscode-workbench"
},
{
"name": "vs/workbench",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/api/common",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/bulkEdit",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/cli",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/codeEditor",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/callHierarchy",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/typeHierarchy",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/codeActions",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/comments",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/debug",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/dialogs",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/emmet",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/experiments",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/extensions",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/externalTerminal",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/feedback",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/files",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/html",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/issue",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/inlayHints",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/interactive",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/languageStatus",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/keybindings",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/markers",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/mergeEditor",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/localization",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/logs",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/output",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/performance",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/preferences",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/notebook",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/quickaccess",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/userData",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/remote",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/relauncher",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/sash",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/scm",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/search",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/searchEditor",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/snippets",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/format",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/tags",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/surveys",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/tasks",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/testing",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/terminal",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/themes",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/trust",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/update",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/url",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/watermark",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/webview",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/webviewPanel",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/workspace",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/workspaces",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/customEditor",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/externalUriOpener",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/welcomeGettingStarted",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/welcomeOverlay",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/welcomePage",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/welcomeViews",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/welcomeWalkthrough",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/outline",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/userDataSync",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/editSessions",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/views",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/languageDetection",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/audioCues",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/deprecatedExtensionMigrator",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/bracketPairColorizer2Telemetry",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/offline",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/actions",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/authToken",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/backup",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/bulkEdit",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/clipboard",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/commands",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/configuration",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/configurationResolver",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/dialogs",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/editor",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/extensions",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/extensionManagement",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/files",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/history",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/log",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/integrity",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/keybinding",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/lifecycle",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/language",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/progress",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/remote",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/search",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/textfile",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/themes",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/textMate",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/workingCopy",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/workspaces",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/decorations",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/label",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/preferences",
"project": "vscode-preferences"
},
{
"name": "vs/workbench/services/notification",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/userData",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/userDataSync",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/editSessions",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/views",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/timeline",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/localHistory",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/authentication",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/extensionRecommendations",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/gettingStarted",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/services/host",
"project": "vscode-workbench"
},
{
"name": "vs/workbench/contrib/userDataProfile",
"project": "vscode-profiles"
},
{
"name": "vs/workbench/services/userDataProfile",
"project": "vscode-profiles"
}
]
}
@@ -0,0 +1,16 @@
{
"originalFileName": "./1.json",
"modifiedFileName": "./2.json",
"diffs": [
{
"originalRange": "[301,301)",
"modifiedRange": "[301,305)",
"innerChanges": [
{
"originalRange": "[301,1 -> 301,1]",
"modifiedRange": "[301,1 -> 305,1]"
}
]
}
]
}
@@ -0,0 +1,11 @@
{
"originalFileName": "./1.json",
"modifiedFileName": "./2.json",
"diffs": [
{
"originalRange": "[302,302)",
"modifiedRange": "[302,306)",
"innerChanges": null
}
]
}
@@ -0,0 +1 @@
console.log('foo');
@@ -0,0 +1 @@
console.log('foo');
@@ -0,0 +1,16 @@
{
"originalFileName": "./1.js",
"modifiedFileName": "./2.js",
"diffs": [
{
"originalRange": "[1,2)",
"modifiedRange": "[1,2)",
"innerChanges": [
{
"originalRange": "[1,20 -> 1,21]",
"modifiedRange": "[1,20 -> 1,20]"
}
]
}
]
}
@@ -0,0 +1,16 @@
{
"originalFileName": "./1.js",
"modifiedFileName": "./2.js",
"diffs": [
{
"originalRange": "[1,2)",
"modifiedRange": "[1,2)",
"innerChanges": [
{
"originalRange": "[1,20 -> 1,21]",
"modifiedRange": "[1,20 -> 1,20]"
}
]
}
]
}
@@ -0,0 +1,71 @@
class Test {
public getDecorationsViewportData(viewRange: Range): IDecorationsViewportData {
return null!;
}
public getInlineDecorationsOnLine(lineNumber: number): InlineDecoration[] {
const range = new Range(lineNumber, this._linesCollection.getViewLineMinColumn(lineNumber), lineNumber, this._linesCollection.getViewLineMaxColumn(lineNumber));
return this._getDecorationsInRange(range).inlineDecorations[0];
}
private _getDecorationsInRange(viewRange: Range): IDecorationsViewportData {
const modelDecorations = this._linesCollection.getDecorationsInRange(viewRange, this.editorId, filterValidationDecorations(this.configuration.options));
const startLineNumber = viewRange.startLineNumber;
const endLineNumber = viewRange.endLineNumber;
const decorationsInViewport: ViewModelDecoration[] = [];
let decorationsInViewportLen = 0;
const inlineDecorations: InlineDecoration[][] = [];
for (let j = startLineNumber; j <= endLineNumber; j++) {
inlineDecorations[j - startLineNumber] = [];
}
for (let i = 0, len = modelDecorations.length; i < len; i++) {
const modelDecoration = modelDecorations[i];
const decorationOptions = modelDecoration.options;
if (!isModelDecorationVisible(this.model, modelDecoration)) {
continue;
}
const viewModelDecoration = this._getOrCreateViewModelDecoration(modelDecoration);
const viewRange = viewModelDecoration.range;
decorationsInViewport[decorationsInViewportLen++] = viewModelDecoration;
if (decorationOptions.inlineClassName) {
const inlineDecoration = new InlineDecoration(viewRange, decorationOptions.inlineClassName, decorationOptions.inlineClassNameAffectsLetterSpacing ? InlineDecorationType.RegularAffectingLetterSpacing : InlineDecorationType.Regular);
const intersectedStartLineNumber = Math.max(startLineNumber, viewRange.startLineNumber);
const intersectedEndLineNumber = Math.min(endLineNumber, viewRange.endLineNumber);
for (let j = intersectedStartLineNumber; j <= intersectedEndLineNumber; j++) {
inlineDecorations[j - startLineNumber].push(inlineDecoration);
}
}
if (decorationOptions.beforeContentClassName) {
if (startLineNumber <= viewRange.startLineNumber && viewRange.startLineNumber <= endLineNumber) {
const inlineDecoration = new InlineDecoration(
new Range(viewRange.startLineNumber, viewRange.startColumn, viewRange.startLineNumber, viewRange.startColumn),
decorationOptions.beforeContentClassName,
InlineDecorationType.Before
);
inlineDecorations[viewRange.startLineNumber - startLineNumber].push(inlineDecoration);
}
}
if (decorationOptions.afterContentClassName) {
if (startLineNumber <= viewRange.endLineNumber && viewRange.endLineNumber <= endLineNumber) {
const inlineDecoration = new InlineDecoration(
new Range(viewRange.endLineNumber, viewRange.endColumn, viewRange.endLineNumber, viewRange.endColumn),
decorationOptions.afterContentClassName,
InlineDecorationType.After
);
inlineDecorations[viewRange.endLineNumber - startLineNumber].push(inlineDecoration);
}
}
}
return {
decorations: decorationsInViewport,
inlineDecorations: inlineDecorations
};
}
}
@@ -0,0 +1,67 @@
class Test {
public getDecorationsViewportData(viewRange: Range): IDecorationsViewportData {
return null!;
}
private _getDecorationsViewportData(viewportRange: Range, onlyMinimapDecorations: boolean): IDecorationsViewportData {
const modelDecorations = this._linesCollection.getDecorationsInRange(viewportRange, this.editorId, filterValidationDecorations(this.configuration.options), onlyMinimapDecorations);
const startLineNumber = viewportRange.startLineNumber;
const endLineNumber = viewportRange.endLineNumber;
const decorationsInViewport: ViewModelDecoration[] = [];
let decorationsInViewportLen = 0;
const inlineDecorations: InlineDecoration[][] = [];
for (let j = startLineNumber; j <= endLineNumber; j++) {
inlineDecorations[j - startLineNumber] = [];
}
for (let i = 0, len = modelDecorations.length; i < len; i++) {
const modelDecoration = modelDecorations[i];
const decorationOptions = modelDecoration.options;
if (!isModelDecorationVisible(this.model, modelDecoration)) {
continue;
}
const viewModelDecoration = this._getOrCreateViewModelDecoration(modelDecoration);
const viewRange = viewModelDecoration.range;
decorationsInViewport[decorationsInViewportLen++] = viewModelDecoration;
if (decorationOptions.inlineClassName) {
const inlineDecoration = new InlineDecoration(viewRange, decorationOptions.inlineClassName, decorationOptions.inlineClassNameAffectsLetterSpacing ? InlineDecorationType.RegularAffectingLetterSpacing : InlineDecorationType.Regular);
const intersectedStartLineNumber = Math.max(startLineNumber, viewRange.startLineNumber);
const intersectedEndLineNumber = Math.min(endLineNumber, viewRange.endLineNumber);
for (let j = intersectedStartLineNumber; j <= intersectedEndLineNumber; j++) {
inlineDecorations[j - startLineNumber].push(inlineDecoration);
}
}
if (decorationOptions.beforeContentClassName) {
if (startLineNumber <= viewRange.startLineNumber && viewRange.startLineNumber <= endLineNumber) {
const inlineDecoration = new InlineDecoration(
new Range(viewRange.startLineNumber, viewRange.startColumn, viewRange.startLineNumber, viewRange.startColumn),
decorationOptions.beforeContentClassName,
InlineDecorationType.Before
);
inlineDecorations[viewRange.startLineNumber - startLineNumber].push(inlineDecoration);
}
}
if (decorationOptions.afterContentClassName) {
if (startLineNumber <= viewRange.endLineNumber && viewRange.endLineNumber <= endLineNumber) {
const inlineDecoration = new InlineDecoration(
new Range(viewRange.endLineNumber, viewRange.endColumn, viewRange.endLineNumber, viewRange.endColumn),
decorationOptions.afterContentClassName,
InlineDecorationType.After
);
inlineDecorations[viewRange.endLineNumber - startLineNumber].push(inlineDecoration);
}
}
}
return {
decorations: decorationsInViewport,
inlineDecorations: inlineDecorations
};
}
}
@@ -0,0 +1,278 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[6,10)",
"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,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,58 -> 6,63]",
"modifiedRange": "[6,95 -> 6,95]"
},
{
"originalRange": "[6,73 -> 6,75]",
"modifiedRange": "[6,105 -> 6,118]"
},
{
"originalRange": "[7,9 -> 7,13]",
"modifiedRange": "[7,9 -> 7,12]"
},
{
"originalRange": "[7,14 -> 7,18]",
"modifiedRange": "[7,13 -> 7,15]"
},
{
"originalRange": "[7,19 -> 7,22]",
"modifiedRange": "[7,16 -> 7,19]"
},
{
"originalRange": "[7,23 -> 7,28]",
"modifiedRange": "[7,20 -> 7,21]"
},
{
"originalRange": "[7,29 -> 7,29]",
"modifiedRange": "[7,22 -> 7,23]"
},
{
"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": "[8,66 -> 9,3]",
"modifiedRange": "[7,183 -> 7,183]"
}
]
},
{
"originalRange": "[11,15)",
"modifiedRange": "[9,11)",
"innerChanges": [
{
"originalRange": "[11,1 -> 13,1]",
"modifiedRange": "[9,1 -> 9,1]"
},
{
"originalRange": "[13,31 -> 13,31]",
"modifiedRange": "[9,31 -> 9,35]"
},
{
"originalRange": "[14,29 -> 14,29]",
"modifiedRange": "[10,29 -> 10,33]"
}
]
}
]
}
@@ -0,0 +1,78 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[6,10)",
"modifiedRange": "[6,8)",
"innerChanges": [
{
"originalRange": "[6,3 -> 6,9]",
"modifiedRange": "[6,3 -> 6,11]"
},
{
"originalRange": "[6,12 -> 6,18]",
"modifiedRange": "[6,14 -> 6,14]"
},
{
"originalRange": "[6,29 -> 6,54]",
"modifiedRange": "[6,25 -> 6,91]"
},
{
"originalRange": "[6,58 -> 6,63]",
"modifiedRange": "[6,95 -> 6,95]"
},
{
"originalRange": "[6,73 -> 6,75]",
"modifiedRange": "[6,105 -> 6,118]"
},
{
"originalRange": "[7,9 -> 7,38]",
"modifiedRange": "[7,9 -> 7,27]"
},
{
"originalRange": "[7,64 -> 7,105]",
"modifiedRange": "[7,53 -> 7,85]"
},
{
"originalRange": "[7,112 -> 7,124]",
"modifiedRange": "[7,92 -> 7,114]"
},
{
"originalRange": "[7,128 -> 8,10]",
"modifiedRange": "[7,118 -> 7,130]"
},
{
"originalRange": "[8,15 -> 8,23]",
"modifiedRange": "[7,135 -> 7,142]"
},
{
"originalRange": "[8,29 -> 8,51]",
"modifiedRange": "[7,148 -> 7,170]"
},
{
"originalRange": "[8,62 -> 9,3]",
"modifiedRange": "[7,181 -> 7,183]"
}
]
},
{
"originalRange": "[11,15)",
"modifiedRange": "[9,11)",
"innerChanges": [
{
"originalRange": "[11,1 -> 13,1]",
"modifiedRange": "[9,1 -> 9,1]"
},
{
"originalRange": "[13,31 -> 13,31]",
"modifiedRange": "[9,31 -> 9,35]"
},
{
"originalRange": "[14,29 -> 14,29]",
"modifiedRange": "[10,29 -> 10,33]"
}
]
}
]
}
@@ -0,0 +1,5 @@
import * as path from 'path';
import { Command } from 'vscode';
import * as nls from 'vscode-nls';
"()()()()()()()()()()()()()"
@@ -0,0 +1,5 @@
import * as path from 'path';
import { Command, commands } from 'vscode';
import * as nls from 'vscode-nls';
"Gallicum()est()divisa()in()partres()tres()quarum()unam()est()()()()()()()()()()()()"
@@ -0,0 +1,30 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[2,3)",
"modifiedRange": "[2,3)",
"innerChanges": [
{
"originalRange": "[2,17 -> 2,17]",
"modifiedRange": "[2,17 -> 2,27]"
}
]
},
{
"originalRange": "[5,6)",
"modifiedRange": "[5,6)",
"innerChanges": [
{
"originalRange": "[5,2 -> 5,2]",
"modifiedRange": "[5,2 -> 5,56]"
},
{
"originalRange": "[5,4 -> 5,4]",
"modifiedRange": "[5,58 -> 5,61]"
}
]
}
]
}
@@ -0,0 +1,26 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[2,3)",
"modifiedRange": "[2,3)",
"innerChanges": [
{
"originalRange": "[2,17 -> 2,17]",
"modifiedRange": "[2,17 -> 2,27]"
}
]
},
{
"originalRange": "[5,6)",
"modifiedRange": "[5,6)",
"innerChanges": [
{
"originalRange": "[5,2 -> 5,4]",
"modifiedRange": "[5,2 -> 5,61]"
}
]
}
]
}
@@ -0,0 +1,5 @@
import { EditorSimpleWorker } from 'vs/editor/common/services/editorSimpleWorker';
import { IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker';
import { IModelService } from 'vs/editor/common/services/model';
let x: [IEditorWorkerService, EditorSimpleWorker, IModelService, IUnicodeHighlightsResult];
@@ -0,0 +1,6 @@
import { EditorSimpleWorker } from 'vs/editor/common/services/editorSimpleWorker';
import { IDiffComputationResult, IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker';
import { IModelService } from 'vs/editor/common/services/model';
let x: [IEditorWorkerService, EditorSimpleWorker, IModelService, IUnicodeHighlightsResult];
let y: IDiffComputationResult;
@@ -0,0 +1,26 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[2,3)",
"modifiedRange": "[2,3)",
"innerChanges": [
{
"originalRange": "[2,9 -> 2,9]",
"modifiedRange": "[2,9 -> 2,33]"
}
]
},
{
"originalRange": "[6,6)",
"modifiedRange": "[6,7)",
"innerChanges": [
{
"originalRange": "[6,1 -> 6,1]",
"modifiedRange": "[6,1 -> 7,1]"
}
]
}
]
}
@@ -0,0 +1,21 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[2,3)",
"modifiedRange": "[2,3)",
"innerChanges": [
{
"originalRange": "[2,11 -> 2,11]",
"modifiedRange": "[2,11 -> 2,35]"
}
]
},
{
"originalRange": "[6,6)",
"modifiedRange": "[6,7)",
"innerChanges": null
}
]
}
@@ -0,0 +1 @@
x
@@ -0,0 +1,16 @@
{
"originalFileName": "./1.txt",
"modifiedFileName": "./2.txt",
"diffs": [
{
"originalRange": "[1,2)",
"modifiedRange": "[1,2)",
"innerChanges": [
{
"originalRange": "[1,1 -> 1,1]",
"modifiedRange": "[1,1 -> 1,2]"
}
]
}
]
}
@@ -0,0 +1,11 @@
{
"originalFileName": "./1.txt",
"modifiedFileName": "./2.txt",
"diffs": [
{
"originalRange": "[1,2)",
"modifiedRange": "[1,2)",
"innerChanges": null
}
]
}
@@ -0,0 +1,12 @@
interface Test {
/**
* Render +/- indicators for added/deleted changes.
* Defaults to true.
*/
renderIndicators?: boolean;
/**
* Original model should be editable?
* Defaults to false.
*/
originalEditable?: boolean;
}
@@ -0,0 +1,17 @@
interface Test {
/**
* Render +/- indicators for added/deleted changes.
* Defaults to true.
*/
renderIndicators?: boolean;
/**
* Shows icons in the glyph margin to revert changes.
* Default to true.
*/
renderMarginRevertIcon?: boolean;
/**
* Original model should be editable?
* Defaults to false.
*/
originalEditable?: boolean;
}
@@ -0,0 +1,16 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[7,7)",
"modifiedRange": "[7,12)",
"innerChanges": [
{
"originalRange": "[7,1 -> 7,1]",
"modifiedRange": "[7,1 -> 12,1]"
}
]
}
]
}
@@ -0,0 +1,11 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[8,8)",
"modifiedRange": "[8,13)",
"innerChanges": null
}
]
}
@@ -0,0 +1,33 @@
class Test {
// ---- BEGIN diff --------------------------------------------------------------------------
public async computeDiff(originalUrl: string, modifiedUrl: string, ignoreTrimWhitespace: boolean, maxComputationTime: number): Promise<IDiffComputationResult | null> {
const original = this._getModel(originalUrl);
const modified = this._getModel(modifiedUrl);
if (!original || !modified) {
return null;
}
return EditorSimpleWorker.computeDiff(original, modified, ignoreTrimWhitespace, maxComputationTime);
}
public static computeDiff(originalTextModel: ICommonModel | ITextModel, modifiedTextModel: ICommonModel | ITextModel, ignoreTrimWhitespace: boolean, maxComputationTime: number): IDiffComputationResult | null {
const originalLines = originalTextModel.getLinesContent();
const modifiedLines = modifiedTextModel.getLinesContent();
const diffComputer = new DiffComputer(originalLines, modifiedLines, {
shouldComputeCharChanges: true,
shouldPostProcessCharChanges: true,
shouldIgnoreTrimWhitespace: ignoreTrimWhitespace,
shouldMakePrettyDiff: true,
maxComputationTime: maxComputationTime
});
const diffResult = diffComputer.computeDiff();
const identical = (diffResult.changes.length > 0 ? false : this._modelsAreIdentical(originalTextModel, modifiedTextModel));
return {
quitEarly: diffResult.quitEarly,
identical: identical,
changes: diffResult.changes
};
}
}
@@ -0,0 +1,40 @@
class Test {
// ---- BEGIN diff --------------------------------------------------------------------------
public async computeDiff(originalUrl: string, modifiedUrl: string, options: ILinesDiffComputerOptions): Promise<IDiffComputationResult | null> {
const original = this._getModel(originalUrl);
const modified = this._getModel(modifiedUrl);
if (!original || !modified) {
return null;
}
return EditorSimpleWorker.computeDiff(original, modified, options);
}
public static computeDiff(originalTextModel: ICommonModel | ITextModel, modifiedTextModel: ICommonModel | ITextModel, options: ILinesDiffComputerOptions): IDiffComputationResult {
const diffAlgorithm: ILinesDiffComputer = options.diffAlgorithm === 'experimental' ? linesDiffComputers.experimental : linesDiffComputers.smart;
const originalLines = originalTextModel.getLinesContent();
const modifiedLines = modifiedTextModel.getLinesContent();
const result = diffAlgorithm.computeDiff(originalLines, modifiedLines, options);
const identical = (result.changes.length > 0 ? false : this._modelsAreIdentical(originalTextModel, modifiedTextModel));
return {
identical,
quitEarly: result.quitEarly,
changes: result.changes.map(m => ([m.originalRange.startLineNumber, m.originalRange.endLineNumberExclusive, m.modifiedRange.startLineNumber, m.modifiedRange.endLineNumberExclusive, m.innerChanges?.map(m => [
m.originalRange.startLineNumber,
m.originalRange.startColumn,
m.originalRange.endLineNumber,
m.originalRange.endColumn,
m.modifiedRange.startLineNumber,
m.modifiedRange.startColumn,
m.modifiedRange.endLineNumber,
m.modifiedRange.endColumn,
])]))
};
}
}
@@ -0,0 +1,508 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[2,3)",
"modifiedRange": "[2,3)",
"innerChanges": [
{
"originalRange": "[2,1 -> 2,5]",
"modifiedRange": "[2,1 -> 2,2]"
}
]
},
{
"originalRange": "[4,5)",
"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,109 -> 4,110]",
"modifiedRange": "[4,94 -> 4,98]"
},
{
"originalRange": "[4,114 -> 4,126]",
"modifiedRange": "[4,102 -> 4,103]"
}
]
},
{
"originalRange": "[11,12)",
"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,97 -> 11,101]",
"modifiedRange": "[11,67 -> 11,68]"
}
]
},
{
"originalRange": "[14,15)",
"modifiedRange": "[14,18)",
"innerChanges": [
{
"originalRange": "[14,120 -> 14,120]",
"modifiedRange": "[14,120 -> 14,123]"
},
{
"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,181 -> 14,181]",
"modifiedRange": "[16,25 -> 16,30]"
},
{
"originalRange": "[14,191 -> 14,192]",
"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,209 -> 14,209]",
"modifiedRange": "[16,85 -> 16,119]"
},
{
"originalRange": "[14,210 -> 14,211]",
"modifiedRange": "[16,120 -> 17,1]"
}
]
},
{
"originalRange": "[17,24)",
"modifiedRange": "[20,24)",
"innerChanges": [
{
"originalRange": "[17,1 -> 17,1]",
"modifiedRange": "[20,1 -> 21,1]"
},
{
"originalRange": "[17,8 -> 17,8]",
"modifiedRange": "[21,8 -> 21,17]"
},
{
"originalRange": "[17,13 -> 17,14]",
"modifiedRange": "[21,22 -> 21,33]"
},
{
"originalRange": "[17,20 -> 17,28]",
"modifiedRange": "[21,39 -> 21,39]"
},
{
"originalRange": "[17,32 -> 17,40]",
"modifiedRange": "[21,43 -> 21,43]"
},
{
"originalRange": "[17,71 -> 17,72]",
"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,10 -> 19,14]",
"modifiedRange": "[23,28 -> 23,28]"
},
{
"originalRange": "[19,14 -> 19,17]",
"modifiedRange": "[23,28 -> 23,29]"
},
{
"originalRange": "[19,18 -> 19,26]",
"modifiedRange": "[23,30 -> 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": "[25,27)",
"modifiedRange": "[25,25)",
"innerChanges": [
{
"originalRange": "[25,1 -> 27,1]",
"modifiedRange": "[25,1 -> 25,1]"
}
]
},
{
"originalRange": "[28,31)",
"modifiedRange": "[26,38)",
"innerChanges": [
{
"originalRange": "[28,4 -> 28,4]",
"modifiedRange": "[26,4 -> 27,4]"
},
{
"originalRange": "[28,15 -> 28,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": "[30,4 -> 30,6]",
"modifiedRange": "[30,4 -> 30,16]"
},
{
"originalRange": "[30,10 -> 30,10]",
"modifiedRange": "[30,20 -> 30,21]"
},
{
"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]"
}
]
}
]
}
@@ -0,0 +1,155 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[2,3)",
"modifiedRange": "[2,3)",
"innerChanges": [
{
"originalRange": "[2,1 -> 2,5]",
"modifiedRange": "[2,1 -> 2,2]"
}
]
},
{
"originalRange": "[4,5)",
"modifiedRange": "[4,5)",
"innerChanges": [
{
"originalRange": "[4,69 -> 4,103]",
"modifiedRange": "[4,69 -> 4,88]"
},
{
"originalRange": "[4,109 -> 4,110]",
"modifiedRange": "[4,94 -> 4,98]"
},
{
"originalRange": "[4,114 -> 4,126]",
"modifiedRange": "[4,102 -> 4,103]"
}
]
},
{
"originalRange": "[11,12)",
"modifiedRange": "[11,12)",
"innerChanges": [
{
"originalRange": "[11,61 -> 11,93]",
"modifiedRange": "[11,61 -> 11,63]"
},
{
"originalRange": "[11,97 -> 11,101]",
"modifiedRange": "[11,67 -> 11,68]"
}
]
},
{
"originalRange": "[14,15)",
"modifiedRange": "[14,18)",
"innerChanges": [
{
"originalRange": "[14,120 -> 14,154]",
"modifiedRange": "[14,120 -> 14,162]"
},
{
"originalRange": "[14,165 -> 14,178]",
"modifiedRange": "[14,173 -> 16,22]"
},
{
"originalRange": "[14,181 -> 14,181]",
"modifiedRange": "[16,25 -> 16,30]"
},
{
"originalRange": "[14,191 -> 14,192]",
"modifiedRange": "[16,40 -> 16,47]"
},
{
"originalRange": "[14,196 -> 14,211]",
"modifiedRange": "[16,51 -> 17,1]"
}
]
},
{
"originalRange": "[17,24)",
"modifiedRange": "[20,24)",
"innerChanges": [
{
"originalRange": "[17,1 -> 17,1]",
"modifiedRange": "[20,1 -> 21,1]"
},
{
"originalRange": "[17,9 -> 17,21]",
"modifiedRange": "[21,9 -> 21,15]"
},
{
"originalRange": "[17,24 -> 17,29]",
"modifiedRange": "[21,18 -> 21,19]"
},
{
"originalRange": "[17,32 -> 17,33]",
"modifiedRange": "[21,22 -> 21,33]"
},
{
"originalRange": "[17,39 -> 17,40]",
"modifiedRange": "[21,39 -> 21,43]"
},
{
"originalRange": "[17,71 -> 17,72]",
"modifiedRange": "[21,74 -> 22,1]"
},
{
"originalRange": "[18,3 -> 19,26]",
"modifiedRange": "[23,3 -> 23,30]"
},
{
"originalRange": "[19,32 -> 19,32]",
"modifiedRange": "[23,36 -> 23,56]"
},
{
"originalRange": "[19,35 -> 23,4]",
"modifiedRange": "[23,59 -> 23,120]"
}
]
},
{
"originalRange": "[25,27)",
"modifiedRange": "[25,25)",
"innerChanges": null
},
{
"originalRange": "[28,31)",
"modifiedRange": "[26,38)",
"innerChanges": [
{
"originalRange": "[28,1 -> 28,1]",
"modifiedRange": "[26,1 -> 27,1]"
},
{
"originalRange": "[28,15 -> 28,20]",
"modifiedRange": "[27,15 -> 27,16]"
},
{
"originalRange": "[29,4 -> 29,24]",
"modifiedRange": "[28,4 -> 32,30]"
},
{
"originalRange": "[30,4 -> 30,6]",
"modifiedRange": "[33,4 -> 33,16]"
},
{
"originalRange": "[30,10 -> 30,13]",
"modifiedRange": "[33,20 -> 34,9]"
},
{
"originalRange": "[30,16 -> 30,26]",
"modifiedRange": "[34,12 -> 36,16]"
},
{
"originalRange": "[30,30 -> 30,31]",
"modifiedRange": "[36,20 -> 37,9]"
}
]
}
]
}
@@ -0,0 +1,26 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { URI } from 'vs/base/common/uri';
import { IRange } from 'vs/editor/common/core/range';
import { IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker';
import { TextEdit, IInplaceReplaceSupportResult } from 'vs/editor/common/languages';
import { IChange, IDiffComputationResult } from 'vs/editor/common/diff/diffComputer';
export class TestEditorWorkerService implements IEditorWorkerService {
declare readonly _serviceBrand: undefined;
canComputeUnicodeHighlights(uri: URI): boolean { return false; }
async computedUnicodeHighlights(uri: URI): Promise<IUnicodeHighlightsResult> { return { ranges: [], hasMore: false, ambiguousCharacterCount: 0, invisibleCharacterCount: 0, nonBasicAsciiCharacterCount: 0 }; }
async computeDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean, maxComputationTime: number): Promise<IDiffComputationResult | null> { return null; }
canComputeDirtyDiff(original: URI, modified: URI): boolean { return false; }
async computeDirtyDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean): Promise<IChange[] | null> { return null; }
async computeMoreMinimalEdits(resource: URI, edits: TextEdit[] | null | undefined): Promise<TextEdit[] | undefined> { return undefined; }
canComputeWordRanges(resource: URI): boolean { return false; }
async computeWordRanges(resource: URI, range: IRange): Promise<{ [word: string]: IRange[] } | null> { return null; }
canNavigateValueSet(resource: URI): boolean { return false; }
async navigateValueSet(resource: URI, range: IRange, up: boolean): Promise<IInplaceReplaceSupportResult | null> { return null; }
}
@@ -0,0 +1,27 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { URI } from 'vs/base/common/uri';
import { IRange } from 'vs/editor/common/core/range';
import { IDiffComputationResult, IEditorWorkerService, IUnicodeHighlightsResult } from 'vs/editor/common/services/editorWorker';
import { TextEdit, IInplaceReplaceSupportResult } from 'vs/editor/common/languages';
import { IDocumentDiffProviderOptions } from 'vs/editor/common/diff/documentDiffProvider';
import { IChange } from 'vs/editor/common/diff/smartLinesDiffComputer';
export class TestEditorWorkerService implements IEditorWorkerService {
declare readonly _serviceBrand: undefined;
canComputeUnicodeHighlights(uri: URI): boolean { return false; }
async computedUnicodeHighlights(uri: URI): Promise<IUnicodeHighlightsResult> { return { ranges: [], hasMore: false, ambiguousCharacterCount: 0, invisibleCharacterCount: 0, nonBasicAsciiCharacterCount: 0 }; }
async computeDiff(original: URI, modified: URI, options: IDocumentDiffProviderOptions): Promise<IDiffComputationResult | null> { return null; }
canComputeDirtyDiff(original: URI, modified: URI): boolean { return false; }
async computeDirtyDiff(original: URI, modified: URI, ignoreTrimWhitespace: boolean): Promise<IChange[] | null> { return null; }
async computeMoreMinimalEdits(resource: URI, edits: TextEdit[] | null | undefined): Promise<TextEdit[] | undefined> { return undefined; }
canComputeWordRanges(resource: URI): boolean { return false; }
async computeWordRanges(resource: URI, range: IRange): Promise<{ [word: string]: IRange[] } | null> { return null; }
canNavigateValueSet(resource: URI): boolean { return false; }
async navigateValueSet(resource: URI, range: IRange, up: boolean): Promise<IInplaceReplaceSupportResult | null> { return null; }
}
@@ -0,0 +1,112 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[8,9)",
"modifiedRange": "[8,9)",
"innerChanges": [
{
"originalRange": "[8,9 -> 8,9]",
"modifiedRange": "[8,9 -> 8,33]"
}
]
},
{
"originalRange": "[10,11)",
"modifiedRange": "[10,12)",
"innerChanges": [
{
"originalRange": "[10,11 -> 10,14]",
"modifiedRange": "[10,11 -> 10,17]"
},
{
"originalRange": "[10,15 -> 10,20]",
"modifiedRange": "[10,18 -> 10,19]"
},
{
"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,72 -> 10,73]",
"modifiedRange": "[11,48 -> 11,59]"
}
]
},
{
"originalRange": "[18,19)",
"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,95 -> 18,107]",
"modifiedRange": "[19,86 -> 19,87]"
}
]
}
]
}
@@ -0,0 +1,48 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[8,9)",
"modifiedRange": "[8,9)",
"innerChanges": [
{
"originalRange": "[8,11 -> 8,11]",
"modifiedRange": "[8,11 -> 8,35]"
}
]
},
{
"originalRange": "[10,11)",
"modifiedRange": "[10,12)",
"innerChanges": [
{
"originalRange": "[10,11 -> 10,20]",
"modifiedRange": "[10,11 -> 10,77]"
},
{
"originalRange": "[10,24 -> 10,41]",
"modifiedRange": "[10,81 -> 11,17]"
},
{
"originalRange": "[10,72 -> 10,73]",
"modifiedRange": "[11,48 -> 11,59]"
}
]
},
{
"originalRange": "[18,19)",
"modifiedRange": "[19,20)",
"innerChanges": [
{
"originalRange": "[18,50 -> 18,91]",
"modifiedRange": "[19,50 -> 19,82]"
},
{
"originalRange": "[18,95 -> 18,107]",
"modifiedRange": "[19,86 -> 19,87]"
}
]
}
]
}
@@ -0,0 +1,10 @@
import { findLast } from 'vs/base/common/arrays';
import { Disposable } from 'vs/base/common/lifecycle';
import { ITransaction, observableValue, transaction } from 'vs/base/common/observable';
import { Range } from 'vs/editor/common/core/range';
import { ScrollType } from 'vs/editor/common/editorCommon';
import { IFooBar, IFoo } from 'foo';
console.log(observableValue);
console.log(observableValue);
@@ -0,0 +1,10 @@
import { findLast } from 'vs/base/common/arrays';
import { Disposable } from 'vs/base/common/lifecycle';
import { ITransaction, observableFromEvent, observableValue, transaction } from 'vs/base/common/observable';
import { Range } from 'vs/editor/common/core/range';
import { ScrollType } from 'vs/editor/common/editorCommon';
import { IFooBar, IBar, IFoo } from 'foo';
console.log(observableFromEvent, observableValue);
console.log(observableValue, observableFromEvent);
@@ -0,0 +1,46 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[3,4)",
"modifiedRange": "[3,4)",
"innerChanges": [
{
"originalRange": "[3,23 -> 3,23]",
"modifiedRange": "[3,23 -> 3,44]"
}
]
},
{
"originalRange": "[6,7)",
"modifiedRange": "[6,7)",
"innerChanges": [
{
"originalRange": "[6,18 -> 6,18]",
"modifiedRange": "[6,18 -> 6,24]"
}
]
},
{
"originalRange": "[8,9)",
"modifiedRange": "[8,9)",
"innerChanges": [
{
"originalRange": "[8,13 -> 8,13]",
"modifiedRange": "[8,13 -> 8,34]"
}
]
},
{
"originalRange": "[10,11)",
"modifiedRange": "[10,11)",
"innerChanges": [
{
"originalRange": "[10,28 -> 10,28]",
"modifiedRange": "[10,28 -> 10,49]"
}
]
}
]
}
@@ -0,0 +1,46 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[3,4)",
"modifiedRange": "[3,4)",
"innerChanges": [
{
"originalRange": "[3,34 -> 3,34]",
"modifiedRange": "[3,34 -> 3,55]"
}
]
},
{
"originalRange": "[6,7)",
"modifiedRange": "[6,7)",
"innerChanges": [
{
"originalRange": "[6,20 -> 6,20]",
"modifiedRange": "[6,20 -> 6,26]"
}
]
},
{
"originalRange": "[8,9)",
"modifiedRange": "[8,9)",
"innerChanges": [
{
"originalRange": "[8,23 -> 8,23]",
"modifiedRange": "[8,23 -> 8,44]"
}
]
},
{
"originalRange": "[10,11)",
"modifiedRange": "[10,11)",
"innerChanges": [
{
"originalRange": "[10,28 -> 10,28]",
"modifiedRange": "[10,28 -> 10,49]"
}
]
}
]
}
@@ -0,0 +1,15 @@
export class EditorWorkerServiceDiffComputer implements IDiffComputer {
constructor(@IEditorWorkerService private readonly editorWorkerService: IEditorWorkerService) { }
async computeDiff(textModel1: ITextModel, textModel2: ITextModel): Promise<LineDiff[] | null> {
const diffs = await this.editorWorkerService.computeDiff(textModel1.uri, textModel2.uri, false, 1000);
if (!diffs || diffs.quitEarly) {
return null;
}
return diffs.changes.map((c) => LineDiff.fromLineChange(c, textModel1, textModel2));
}
}
function wait(ms: number): Promise<void> {
return new Promise(r => setTimeout(r, ms));
}
@@ -0,0 +1,80 @@
export class EditorWorkerServiceDiffComputer implements IDiffComputer {
constructor(@IEditorWorkerService private readonly editorWorkerService: IEditorWorkerService) { }
async computeDiff(textModel1: ITextModel, textModel2: ITextModel): Promise<LineDiff[] | null> {
const diffs = await this.editorWorkerService.computeDiff(textModel1.uri, textModel2.uri, false, 1000);
if (!diffs || diffs.quitEarly) {
return null;
}
return EditorWorkerServiceDiffComputer.fromDiffComputationResult(diffs, textModel1, textModel2);
}
public static fromDiffComputationResult(result: IDiffComputationResult, textModel1: ITextModel, textModel2: ITextModel): LineDiff[] {
return result.changes.map((c) => fromLineChange(c, textModel1, textModel2));
}
}
function fromLineChange(lineChange: ILineChange, originalTextModel: ITextModel, modifiedTextModel: ITextModel): LineDiff {
let originalRange: LineRange;
if (lineChange.originalEndLineNumber === 0) {
// Insertion
originalRange = new LineRange(lineChange.originalStartLineNumber + 1, 0);
} else {
originalRange = new LineRange(lineChange.originalStartLineNumber, lineChange.originalEndLineNumber - lineChange.originalStartLineNumber + 1);
}
let modifiedRange: LineRange;
if (lineChange.modifiedEndLineNumber === 0) {
// Deletion
modifiedRange = new LineRange(lineChange.modifiedStartLineNumber + 1, 0);
} else {
modifiedRange = new LineRange(lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber - lineChange.modifiedStartLineNumber + 1);
}
let innerDiffs = lineChange.charChanges?.map(c => fromCharChange(c));
if (!innerDiffs) {
innerDiffs = [diffFromLineRanges(originalRange, modifiedRange)];
}
return new LineDiff(
originalTextModel,
originalRange,
modifiedTextModel,
modifiedRange,
innerDiffs
);
}
function diffFromLineRanges(originalRange: LineRange, modifiedRange: LineRange): Diff {
// [1,1) -> [100, 101)
if (originalRange.startLineNumber !== 1 && modifiedRange.startLineNumber !== 1) {
}
let original = new Range(
originalRange.startLineNumber - 1,
Number.MAX_SAFE_INTEGER,
originalRange.endLineNumberExclusive - 1,
Number.MAX_SAFE_INTEGER,
);
let modified = new Range(
modifiedRange.startLineNumber - 1,
Number.MAX_SAFE_INTEGER,
modifiedRange.endLineNumberExclusive - 1,
Number.MAX_SAFE_INTEGER,
);
return new Diff(
original,
modified
);
}
function fromCharChange(charChange: ICharChange): Diff {
return new Diff(
new Range(charChange.originalStartLineNumber, charChange.originalStartColumn, charChange.originalEndLineNumber, charChange.originalEndColumn),
new Range(charChange.modifiedStartLineNumber, charChange.modifiedStartColumn, charChange.modifiedEndLineNumber, charChange.modifiedEndColumn)
);
}
@@ -0,0 +1,226 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[9,10)",
"modifiedRange": "[9,14)",
"innerChanges": [
{
"originalRange": "[9,10 -> 9,10]",
"modifiedRange": "[9,10 -> 9,68]"
},
{
"originalRange": "[9,15 -> 9,15]",
"modifiedRange": "[9,73 -> 13,16]"
},
{
"originalRange": "[9,35 -> 9,44]",
"modifiedRange": "[13,36 -> 13,36]"
}
]
},
{
"originalRange": "[13,15)",
"modifiedRange": "[17,80)",
"innerChanges": [
{
"originalRange": "[13,10 -> 13,11]",
"modifiedRange": "[17,10 -> 17,20]"
},
{
"originalRange": "[13,12 -> 13,12]",
"modifiedRange": "[17,21 -> 17,26]"
},
{
"originalRange": "[13,13 -> 13,13]",
"modifiedRange": "[17,27 -> 17,61]"
},
{
"originalRange": "[13,14 -> 13,14]",
"modifiedRange": "[17,62 -> 19,5]"
},
{
"originalRange": "[13,15 -> 13,15]",
"modifiedRange": "[19,6 -> 19,34]"
},
{
"originalRange": "[13,18 -> 13,18]",
"modifiedRange": "[19,37 -> 20,10]"
},
{
"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]"
}
]
}
]
}
@@ -0,0 +1,38 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[9,10)",
"modifiedRange": "[9,53)",
"innerChanges": null
},
{
"originalRange": "[11,11)",
"modifiedRange": "[54,73)",
"innerChanges": null
},
{
"originalRange": "[13,15)",
"modifiedRange": "[75,80)",
"innerChanges": [
{
"originalRange": "[13,10 -> 13,20]",
"modifiedRange": "[75,10 -> 77,42]"
},
{
"originalRange": "[13,25 -> 14,9]",
"modifiedRange": "[77,47 -> 78,3]"
},
{
"originalRange": "[14,13 -> 14,37]",
"modifiedRange": "[78,7 -> 78,112]"
},
{
"originalRange": "[14,40 -> 14,43]",
"modifiedRange": "[78,115 -> 79,2]"
}
]
}
]
}
@@ -0,0 +1,8 @@
function cloneTypeReference(source: TypeReference): TypeReference {
const type = <TypeReference>createType(source.flags);
type.symbol = source.symbol;
type.objectFlags = source.objectFlags;
type.target = source.target;
type.typeArguments = source.typeArguments;
return type;
}
@@ -0,0 +1,25 @@
function cloneTypeReference(source: TypeReference): TypeReference {
const type = <TypeReference>createType(source.flags);
type.symbol = source.symbol;
type.objectFlags = source.objectFlags;
type.target = source.target;
type.resolvedTypeArguments = source.resolvedTypeArguments;
return type;
}
function createDeferredTypeReference(): DeferredTypeReference {
const aliasSymbol = getAliasSymbolForTypeNode(node);
const aliasTypeArguments = getTypeArgumentsForAliasSymbol(aliasSymbol);
type.target = target;
type.node = node;
type.mapper = mapper;
type.aliasSymbol = aliasSymbol;
return type;
}
function getTypeArguments(type: TypeReference): ReadonlyArray<Type> {
if (!type.resolvedTypeArguments) {
const node = type.node;
}
return type.resolvedTypeArguments;
}
@@ -0,0 +1,38 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[6,7)",
"modifiedRange": "[6,17)",
"innerChanges": [
{
"originalRange": "[6,10 -> 6,11]",
"modifiedRange": "[6,10 -> 6,19]"
},
{
"originalRange": "[6,33 -> 6,33]",
"modifiedRange": "[6,41 -> 7,12]"
},
{
"originalRange": "[6,37 -> 6,37]",
"modifiedRange": "[7,16 -> 12,39]"
},
{
"originalRange": "[6,46 -> 6,46]",
"modifiedRange": "[12,48 -> 16,35]"
}
]
},
{
"originalRange": "[9,9)",
"modifiedRange": "[19,26)",
"innerChanges": [
{
"originalRange": "[9,1 -> 9,1]",
"modifiedRange": "[19,1 -> 26,1]"
}
]
}
]
}
@@ -0,0 +1,33 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[6,7)",
"modifiedRange": "[6,17)",
"innerChanges": [
{
"originalRange": "[6,10 -> 6,11]",
"modifiedRange": "[6,10 -> 6,19]"
},
{
"originalRange": "[6,33 -> 6,33]",
"modifiedRange": "[6,41 -> 7,12]"
},
{
"originalRange": "[6,37 -> 6,37]",
"modifiedRange": "[7,16 -> 12,20]"
},
{
"originalRange": "[6,46 -> 6,46]",
"modifiedRange": "[12,29 -> 16,35]"
}
]
},
{
"originalRange": "[9,9)",
"modifiedRange": "[19,26)",
"innerChanges": null
}
]
}
@@ -0,0 +1,8 @@
function compileProgram(): ExitStatus {
// First get any syntactic errors.
var diagnostics = program.getSyntacticDiagnostics();
reportDiagnostics(diagnostics);
// If we didn't have any syntactic errors, then also try getting the global and
// semantic errors.
if (diagnostics.length === 0)
@@ -0,0 +1,9 @@
function compileProgram(): ExitStatus {
let diagnostics: Diagnostic[];
// First get and report any syntactic errors.
diagnostics = program.getSyntacticDiagnostics();
// If we didn't have any syntactic errors, then also try getting the global and
// semantic errors.
if (diagnostics.length === 0) {
@@ -0,0 +1,42 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[2,5)",
"modifiedRange": "[2,6)",
"innerChanges": [
{
"originalRange": "[2,1 -> 2,1]",
"modifiedRange": "[2,1 -> 4,1]"
},
{
"originalRange": "[2,17 -> 2,17]",
"modifiedRange": "[4,17 -> 4,28]"
},
{
"originalRange": "[2,39 -> 2,40]",
"modifiedRange": "[4,50 -> 4,50]"
},
{
"originalRange": "[3,5 -> 3,9]",
"modifiedRange": "[5,5 -> 5,5]"
},
{
"originalRange": "[3,57 -> 4,36]",
"modifiedRange": "[5,53 -> 5,53]"
}
]
},
{
"originalRange": "[8,9)",
"modifiedRange": "[9,10)",
"innerChanges": [
{
"originalRange": "[8,35 -> 8,35]",
"modifiedRange": "[9,35 -> 9,36]"
}
]
}
]
}
@@ -0,0 +1,42 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[2,5)",
"modifiedRange": "[2,6)",
"innerChanges": [
{
"originalRange": "[2,1 -> 2,1]",
"modifiedRange": "[2,1 -> 4,1]"
},
{
"originalRange": "[2,20 -> 2,20]",
"modifiedRange": "[4,20 -> 4,31]"
},
{
"originalRange": "[2,39 -> 2,40]",
"modifiedRange": "[4,50 -> 4,50]"
},
{
"originalRange": "[3,5 -> 3,9]",
"modifiedRange": "[5,5 -> 5,5]"
},
{
"originalRange": "[3,57 -> 4,36]",
"modifiedRange": "[5,53 -> 5,53]"
}
]
},
{
"originalRange": "[8,9)",
"modifiedRange": "[9,10)",
"innerChanges": [
{
"originalRange": "[8,35 -> 8,35]",
"modifiedRange": "[9,35 -> 9,36]"
}
]
}
]
}
@@ -0,0 +1,138 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IHistoryNavigationWidget } from 'vs/base/browser/history';
import { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';
import { FindInput, IFindInputOptions } from 'vs/base/browser/ui/findinput/findInput';
import { IReplaceInputOptions, ReplaceInput } from 'vs/base/browser/ui/findinput/replaceInput';
import { HistoryInputBox, IHistoryInputOptions } from 'vs/base/browser/ui/inputbox/inputBox';
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey';
import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
import { localize } from 'vs/nls';
import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
export const historyNavigationVisible = new RawContextKey<boolean>('suggestWidgetVisible', false, localize('suggestWidgetVisible', "Whether suggestion are visible"));
const HistoryNavigationWidgetFocusContext = 'historyNavigationWidgetFocus';
const HistoryNavigationForwardsEnablementContext = 'historyNavigationForwardsEnabled';
const HistoryNavigationBackwardsEnablementContext = 'historyNavigationBackwardsEnabled';
export interface IHistoryNavigationContext extends IDisposable {
scopedContextKeyService: IContextKeyService;
historyNavigationForwardsEnablement: IContextKey<boolean>;
historyNavigationBackwardsEnablement: IContextKey<boolean>;
}
let lastFocusedWidget: IHistoryNavigationWidget | undefined = undefined;
const widgets: IHistoryNavigationWidget[] = [];
export function registerAndCreateHistoryNavigationContext(contextKeyService: IContextKeyService, widget: IHistoryNavigationWidget): IHistoryNavigationContext {
if (widgets.includes(widget)) {
throw new Error('Cannot register the same widget multiple times');
}
widgets.push(widget);
const disposableStore = new DisposableStore();
const scopedContextKeyService = disposableStore.add(contextKeyService.createScoped(widget.element));
const historyNavigationWidgetFocus = new RawContextKey<boolean>(HistoryNavigationWidgetFocusContext, false).bindTo(scopedContextKeyService);
const historyNavigationForwardsEnablement = new RawContextKey<boolean>(HistoryNavigationForwardsEnablementContext, true).bindTo(scopedContextKeyService);
const historyNavigationBackwardsEnablement = new RawContextKey<boolean>(HistoryNavigationBackwardsEnablementContext, true).bindTo(scopedContextKeyService);
const onDidFocus = () => {
historyNavigationWidgetFocus.set(true);
lastFocusedWidget = widget;
};
const onDidBlur = () => {
historyNavigationWidgetFocus.set(false);
if (lastFocusedWidget === widget) {
lastFocusedWidget = undefined;
}
};
// Check for currently being focused
if (widget.element === document.activeElement) {
onDidFocus();
}
disposableStore.add(widget.onDidFocus(() => onDidFocus()));
disposableStore.add(widget.onDidBlur(() => onDidBlur()));
disposableStore.add(toDisposable(() => {
widgets.splice(widgets.indexOf(widget), 1);
onDidBlur();
}));
return {
scopedContextKeyService,
historyNavigationForwardsEnablement,
historyNavigationBackwardsEnablement,
dispose() {
disposableStore.dispose();
}
};
}
export class ContextScopedHistoryInputBox extends HistoryInputBox {
constructor(container: HTMLElement, contextViewProvider: IContextViewProvider | undefined, options: IHistoryInputOptions,
@IContextKeyService contextKeyService: IContextKeyService
) {
super(container, contextViewProvider, options);
this._register(registerAndCreateHistoryNavigationContext(contextKeyService, this));
}
}
export class ContextScopedFindInput extends FindInput {
constructor(container: HTMLElement | null, contextViewProvider: IContextViewProvider, options: IFindInputOptions,
@IContextKeyService contextKeyService: IContextKeyService
) {
super(container, contextViewProvider, options);
this._register(registerAndCreateHistoryNavigationContext(contextKeyService, this.inputBox));
}
}
export class ContextScopedReplaceInput extends ReplaceInput {
constructor(container: HTMLElement | null, contextViewProvider: IContextViewProvider | undefined, options: IReplaceInputOptions,
@IContextKeyService contextKeyService: IContextKeyService, showReplaceOptions: boolean = false
) {
super(container, contextViewProvider, showReplaceOptions, options);
this._register(registerAndCreateHistoryNavigationContext(contextKeyService, this.inputBox));
}
}
KeybindingsRegistry.registerCommandAndKeybindingRule({
id: 'history.showPrevious',
weight: KeybindingWeight.WorkbenchContrib,
when: ContextKeyExpr.and(
ContextKeyExpr.has(HistoryNavigationWidgetFocusContext),
ContextKeyExpr.equals(HistoryNavigationBackwardsEnablementContext, true),
historyNavigationVisible.isEqualTo(false),
),
primary: KeyCode.UpArrow,
secondary: [KeyMod.Alt | KeyCode.UpArrow],
handler: (accessor) => {
lastFocusedWidget?.showPreviousValue();
}
});
KeybindingsRegistry.registerCommandAndKeybindingRule({
id: 'history.showNext',
weight: KeybindingWeight.WorkbenchContrib,
when: ContextKeyExpr.and(
ContextKeyExpr.has(HistoryNavigationWidgetFocusContext),
ContextKeyExpr.equals(HistoryNavigationForwardsEnablementContext, true),
historyNavigationVisible.isEqualTo(false),
),
primary: KeyCode.DownArrow,
secondary: [KeyMod.Alt | KeyCode.DownArrow],
handler: (accessor) => {
lastFocusedWidget?.showNextValue();
}
});
@@ -0,0 +1,138 @@
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { IHistoryNavigationWidget } from 'vs/base/browser/history';
import { IContextViewProvider } from 'vs/base/browser/ui/contextview/contextview';
import { FindInput, IFindInputOptions } from 'vs/base/browser/ui/findinput/findInput';
import { IReplaceInputOptions, ReplaceInput } from 'vs/base/browser/ui/findinput/replaceInput';
import { HistoryInputBox, IHistoryInputOptions } from 'vs/base/browser/ui/inputbox/inputBox';
import { KeyCode, KeyMod } from 'vs/base/common/keyCodes';
import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey';
import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
import { localize } from 'vs/nls';
import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle';
export const historyNavigationVisible = new RawContextKey<boolean>('suggestWidgetVisible', false, localize('suggestWidgetVisible', "Whether suggestion are visible"));
const HistoryNavigationWidgetFocusContext = 'historyNavigationWidgetFocus';
const HistoryNavigationForwardsEnablementContext = 'historyNavigationForwardsEnabled';
const HistoryNavigationBackwardsEnablementContext = 'historyNavigationBackwardsEnabled';
export interface IHistoryNavigationContext extends IDisposable {
historyNavigationForwardsEnablement: IContextKey<boolean>;
historyNavigationBackwardsEnablement: IContextKey<boolean>;
}
let lastFocusedWidget: IHistoryNavigationWidget | undefined = undefined;
const widgets: IHistoryNavigationWidget[] = [];
export function registerAndCreateHistoryNavigationContext(scopedContextKeyService: IContextKeyService, widget: IHistoryNavigationWidget): IHistoryNavigationContext {
if (widgets.includes(widget)) {
throw new Error('Cannot register the same widget multiple times');
}
widgets.push(widget);
const disposableStore = new DisposableStore();
const historyNavigationWidgetFocus = new RawContextKey<boolean>(HistoryNavigationWidgetFocusContext, false).bindTo(scopedContextKeyService);
const historyNavigationForwardsEnablement = new RawContextKey<boolean>(HistoryNavigationForwardsEnablementContext, true).bindTo(scopedContextKeyService);
const historyNavigationBackwardsEnablement = new RawContextKey<boolean>(HistoryNavigationBackwardsEnablementContext, true).bindTo(scopedContextKeyService);
const onDidFocus = () => {
historyNavigationWidgetFocus.set(true);
lastFocusedWidget = widget;
};
const onDidBlur = () => {
historyNavigationWidgetFocus.set(false);
if (lastFocusedWidget === widget) {
lastFocusedWidget = undefined;
}
};
// Check for currently being focused
if (widget.element === document.activeElement) {
onDidFocus();
}
disposableStore.add(widget.onDidFocus(() => onDidFocus()));
disposableStore.add(widget.onDidBlur(() => onDidBlur()));
disposableStore.add(toDisposable(() => {
widgets.splice(widgets.indexOf(widget), 1);
onDidBlur();
}));
return {
historyNavigationForwardsEnablement,
historyNavigationBackwardsEnablement,
dispose() {
disposableStore.dispose();
}
};
}
export class ContextScopedHistoryInputBox extends HistoryInputBox {
constructor(container: HTMLElement, contextViewProvider: IContextViewProvider | undefined, options: IHistoryInputOptions,
@IContextKeyService contextKeyService: IContextKeyService
) {
super(container, contextViewProvider, options);
const scopedContextKeyService = this._register(contextKeyService.createScoped(this.element));
this._register(registerAndCreateHistoryNavigationContext(scopedContextKeyService, this));
}
}
export class ContextScopedFindInput extends FindInput {
constructor(container: HTMLElement | null, contextViewProvider: IContextViewProvider, options: IFindInputOptions,
@IContextKeyService contextKeyService: IContextKeyService
) {
super(container, contextViewProvider, options);
const scopedContextKeyService = this._register(contextKeyService.createScoped(this.inputBox.element));
this._register(registerAndCreateHistoryNavigationContext(scopedContextKeyService, this.inputBox));
}
}
export class ContextScopedReplaceInput extends ReplaceInput {
constructor(container: HTMLElement | null, contextViewProvider: IContextViewProvider | undefined, options: IReplaceInputOptions,
@IContextKeyService contextKeyService: IContextKeyService, showReplaceOptions: boolean = false
) {
super(container, contextViewProvider, showReplaceOptions, options);
const scopedContextKeyService = this._register(contextKeyService.createScoped(this.inputBox.element));
this._register(registerAndCreateHistoryNavigationContext(scopedContextKeyService, this.inputBox));
}
}
KeybindingsRegistry.registerCommandAndKeybindingRule({
id: 'history.showPrevious',
weight: KeybindingWeight.WorkbenchContrib,
when: ContextKeyExpr.and(
ContextKeyExpr.has(HistoryNavigationWidgetFocusContext),
ContextKeyExpr.equals(HistoryNavigationBackwardsEnablementContext, true),
historyNavigationVisible.isEqualTo(false),
),
primary: KeyCode.UpArrow,
secondary: [KeyMod.Alt | KeyCode.UpArrow],
handler: (accessor) => {
lastFocusedWidget?.showPreviousValue();
}
});
KeybindingsRegistry.registerCommandAndKeybindingRule({
id: 'history.showNext',
weight: KeybindingWeight.WorkbenchContrib,
when: ContextKeyExpr.and(
ContextKeyExpr.has(HistoryNavigationWidgetFocusContext),
ContextKeyExpr.equals(HistoryNavigationForwardsEnablementContext, true),
historyNavigationVisible.isEqualTo(false),
),
primary: KeyCode.DownArrow,
secondary: [KeyMod.Alt | KeyCode.DownArrow],
handler: (accessor) => {
lastFocusedWidget?.showNextValue();
}
});
@@ -0,0 +1,104 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[24,25)",
"modifiedRange": "[24,24)",
"innerChanges": [
{
"originalRange": "[24,1 -> 25,1]",
"modifiedRange": "[24,1 -> 24,1]"
}
]
},
{
"originalRange": "[32,33)",
"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": "[39,40)",
"modifiedRange": "[38,38)",
"innerChanges": [
{
"originalRange": "[39,1 -> 40,1]",
"modifiedRange": "[38,1 -> 38,1]"
}
]
},
{
"originalRange": "[69,70)",
"modifiedRange": "[67,67)",
"innerChanges": [
{
"originalRange": "[69,1 -> 70,1]",
"modifiedRange": "[67,1 -> 67,1]"
}
]
},
{
"originalRange": "[84,85)",
"modifiedRange": "[81,83)",
"innerChanges": [
{
"originalRange": "[84,1 -> 84,1]",
"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": "[95,96)",
"modifiedRange": "[93,95)",
"innerChanges": [
{
"originalRange": "[95,1 -> 95,1]",
"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": "[105,106)",
"modifiedRange": "[104,106)",
"innerChanges": [
{
"originalRange": "[105,1 -> 105,1]",
"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]"
}
]
}
]
}
@@ -0,0 +1,73 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[24,25)",
"modifiedRange": "[24,24)",
"innerChanges": null
},
{
"originalRange": "[32,33)",
"modifiedRange": "[31,32)",
"innerChanges": [
{
"originalRange": "[32,59 -> 32,61]",
"modifiedRange": "[31,59 -> 31,67]"
}
]
},
{
"originalRange": "[39,40)",
"modifiedRange": "[38,38)",
"innerChanges": null
},
{
"originalRange": "[69,70)",
"modifiedRange": "[67,67)",
"innerChanges": null
},
{
"originalRange": "[84,85)",
"modifiedRange": "[81,83)",
"innerChanges": [
{
"originalRange": "[84,1 -> 84,1]",
"modifiedRange": "[81,1 -> 82,1]"
},
{
"originalRange": "[84,60 -> 84,62]",
"modifiedRange": "[82,60 -> 82,68]"
}
]
},
{
"originalRange": "[95,96)",
"modifiedRange": "[93,95)",
"innerChanges": [
{
"originalRange": "[95,1 -> 95,1]",
"modifiedRange": "[93,1 -> 94,1]"
},
{
"originalRange": "[95,60 -> 95,62]",
"modifiedRange": "[94,60 -> 94,68]"
}
]
},
{
"originalRange": "[105,106)",
"modifiedRange": "[104,106)",
"innerChanges": [
{
"originalRange": "[105,1 -> 105,1]",
"modifiedRange": "[104,1 -> 105,1]"
},
{
"originalRange": "[105,60 -> 105,62]",
"modifiedRange": "[105,60 -> 105,68]"
}
]
}
]
}
@@ -0,0 +1,6 @@
import { assertIsDefined } from 'vs/base/common/types';
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { MenuId, Action2, IAction2Options, IMenuService, SubmenuItemAction } from 'vs/platform/actions/common/actions';
import { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';
import { parseLinkedText } from 'vs/base/common/linkedText';
import { IOpenerService } from 'vs/platform/opener/common/opener';
@@ -0,0 +1,6 @@
import { assertIsDefined } from 'vs/base/common/types';
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { MenuId, Action2, IAction2Options, SubmenuItemAction } from 'vs/platform/actions/common/actions';
import { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';
import { parseLinkedText } from 'vs/base/common/linkedText';
import { IOpenerService } from 'vs/platform/opener/common/opener';
@@ -0,0 +1,16 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[3,4)",
"modifiedRange": "[3,4)",
"innerChanges": [
{
"originalRange": "[3,43 -> 3,57]",
"modifiedRange": "[3,43 -> 3,43]"
}
]
}
]
}
@@ -0,0 +1,16 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[3,4)",
"modifiedRange": "[3,4)",
"innerChanges": [
{
"originalRange": "[3,44 -> 3,58]",
"modifiedRange": "[3,44 -> 3,44]"
}
]
}
]
}
@@ -0,0 +1,9 @@
import { assertIsDefined } from 'vs/base/common/types';
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { MenuId, Action2, IAction2Options, IMenuServiceFooManager, ServiceManagerLocator } from 'vs/platform/actions/common/actions';
import { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';
import { parseLinkedText } from 'vs/base/common/linkedText';
import { IOpenerService } from 'vs/platform/opener/common/opener';
ISFM,SML,SFMKL
console.log(MenuId, Action2, IAction2Options, IMenuServiceFooManager, ServiceManagerLocator);
@@ -0,0 +1,9 @@
import { assertIsDefined } from 'vs/base/common/types';
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import { MenuId, Action2, IAction2Options, ServiceManagerLocator } from 'vs/platform/actions/common/actions';
import { createActionViewItem } from 'vs/platform/actions/browser/menuEntryActionViewItem';
import { parseLinkedText } from 'vs/base/common/linkedText';
import { IOpenerService } from 'vs/platform/opener/common/opener';
SML
console.log(MenuId, Action2, IAction2Options, ServiceManagerLocator);
@@ -0,0 +1,40 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[3,4)",
"modifiedRange": "[3,4)",
"innerChanges": [
{
"originalRange": "[3,43 -> 3,67]",
"modifiedRange": "[3,43 -> 3,43]"
}
]
},
{
"originalRange": "[7,8)",
"modifiedRange": "[7,8)",
"innerChanges": [
{
"originalRange": "[7,1 -> 7,6]",
"modifiedRange": "[7,1 -> 7,1]"
},
{
"originalRange": "[7,9 -> 7,15]",
"modifiedRange": "[7,4 -> 7,4]"
}
]
},
{
"originalRange": "[9,10)",
"modifiedRange": "[9,10)",
"innerChanges": [
{
"originalRange": "[9,46 -> 9,70]",
"modifiedRange": "[9,46 -> 9,46]"
}
]
}
]
}
@@ -0,0 +1,40 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[3,4)",
"modifiedRange": "[3,4)",
"innerChanges": [
{
"originalRange": "[3,44 -> 3,68]",
"modifiedRange": "[3,44 -> 3,44]"
}
]
},
{
"originalRange": "[7,8)",
"modifiedRange": "[7,8)",
"innerChanges": [
{
"originalRange": "[7,1 -> 7,6]",
"modifiedRange": "[7,1 -> 7,1]"
},
{
"originalRange": "[7,9 -> 7,15]",
"modifiedRange": "[7,4 -> 7,4]"
}
]
},
{
"originalRange": "[9,10)",
"modifiedRange": "[9,10)",
"innerChanges": [
{
"originalRange": "[9,47 -> 9,71]",
"modifiedRange": "[9,47 -> 9,47]"
}
]
}
]
}
@@ -0,0 +1,3 @@
import { handledConflictMinimapOverViewRulerColor, unhandledConflictMinimapOverViewRulerColor } from 'vs/workbench/contrib/mergeEditor/browser/view/colors';
import { EditorGutter, IGutterItemInfo, IGutterItemView } from '../editorGutter';
import { CodeEditorView } from './codeEditorView';
@@ -0,0 +1,3 @@
import { handledConflictMinimapOverViewRulerColor, unhandledConflictMinimapOverViewRulerColor } from 'vs/workbench/contrib/mergeEditor/browser/view/colors';
import { EditorGutter, IGutterItemInfo, IGutterItemView } from '../editorGutter';
import { CodeEditorView, TitleMenu } from './codeEditorView';
@@ -0,0 +1,16 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[3,4)",
"modifiedRange": "[3,4)",
"innerChanges": [
{
"originalRange": "[3,24 -> 3,24]",
"modifiedRange": "[3,24 -> 3,35]"
}
]
}
]
}
@@ -0,0 +1,16 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[3,4)",
"modifiedRange": "[3,4)",
"innerChanges": [
{
"originalRange": "[3,24 -> 3,24]",
"modifiedRange": "[3,24 -> 3,35]"
}
]
}
]
}
@@ -0,0 +1 @@
const sequence2 = new SequenceFromIntArray(tgtDocLines);
@@ -0,0 +1 @@
const sequence2 = new LineSequence(tgtDocLines, modifiedLines);
@@ -0,0 +1,24 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[1,2)",
"modifiedRange": "[1,2)",
"innerChanges": [
{
"originalRange": "[1,23 -> 1,23]",
"modifiedRange": "[1,23 -> 1,27]"
},
{
"originalRange": "[1,31 -> 1,43]",
"modifiedRange": "[1,35 -> 1,35]"
},
{
"originalRange": "[1,55 -> 1,55]",
"modifiedRange": "[1,47 -> 1,62]"
}
]
}
]
}
@@ -0,0 +1,24 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[1,2)",
"modifiedRange": "[1,2)",
"innerChanges": [
{
"originalRange": "[1,23 -> 1,23]",
"modifiedRange": "[1,23 -> 1,27]"
},
{
"originalRange": "[1,31 -> 1,43]",
"modifiedRange": "[1,35 -> 1,35]"
},
{
"originalRange": "[1,55 -> 1,55]",
"modifiedRange": "[1,47 -> 1,62]"
}
]
}
]
}
@@ -0,0 +1,5 @@
interface Test {
getDecorationsInViewport(visibleRange: Range): ViewModelDecoration[];
getViewLineRenderingData(visibleRange: Range, lineNumber: number): ViewLineRenderingData;
getViewLineData(lineNumber: number): ViewLineData;
}
@@ -0,0 +1,6 @@
interface Test {
getDecorationsInViewport(visibleRange: Range): ViewModelDecoration[];
getViewportViewLineRenderingData(visibleRange: Range, lineNumber: number): ViewLineRenderingData;
getViewLineRenderingData(lineNumber: number): ViewLineRenderingData;
getViewLineData(lineNumber: number): ViewLineData;
}
@@ -0,0 +1,24 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[3,4)",
"modifiedRange": "[3,5)",
"innerChanges": [
{
"originalRange": "[3,1 -> 3,2]",
"modifiedRange": "[3,1 -> 3,5]"
},
{
"originalRange": "[3,4 -> 3,4]",
"modifiedRange": "[3,7 -> 3,15]"
},
{
"originalRange": "[3,91 -> 3,91]",
"modifiedRange": "[3,102 -> 4,73]"
}
]
}
]
}
@@ -0,0 +1,24 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[3,4)",
"modifiedRange": "[3,5)",
"innerChanges": [
{
"originalRange": "[3,1 -> 3,2]",
"modifiedRange": "[3,1 -> 3,5]"
},
{
"originalRange": "[3,9 -> 3,9]",
"modifiedRange": "[3,12 -> 3,20]"
},
{
"originalRange": "[3,91 -> 3,91]",
"modifiedRange": "[3,102 -> 4,73]"
}
]
}
]
}
@@ -0,0 +1,12 @@
const childEndsAfterEnd = lengthGreaterThanEqual(nodeOffsetEnd, endOffset);
if (childEndsAfterEnd) {
// No child after this child in the requested window, don't recurse
node = child;
level++;
continue whileLoop;
}
const shouldContinue = collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, push, level + 1, levelPerBracketType);
if (!shouldContinue) {
return false;
}
@@ -0,0 +1,12 @@
const childEndsAfterEnd = lengthGreaterThanEqual(nodeOffsetEnd, endOffset);
if (childEndsAfterEnd) {
// No child after this child in the requested window, don't recurse
node = child;
level++;
continue whileLoop;
}
const shouldContinue = collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, push, level + 1, levelPerBracket + 1, levelPerBracketType);
if (!shouldContinue) {
return false;
}
@@ -0,0 +1,16 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[9,10)",
"modifiedRange": "[9,10)",
"innerChanges": [
{
"originalRange": "[9,116 -> 9,116]",
"modifiedRange": "[9,116 -> 9,137]"
}
]
}
]
}
@@ -0,0 +1,16 @@
{
"originalFileName": "./1.tst",
"modifiedFileName": "./2.tst",
"diffs": [
{
"originalRange": "[9,10)",
"modifiedRange": "[9,10)",
"innerChanges": [
{
"originalRange": "[9,135 -> 9,135]",
"modifiedRange": "[9,135 -> 9,156]"
}
]
}
]
}

Some files were not shown because too many files have changed in this diff Show More