From b039142757c1036ad14d2d60ef78691696b8c26a Mon Sep 17 00:00:00 2001 From: meganrogge Date: Wed, 20 Sep 2023 08:40:43 -0700 Subject: [PATCH] Revert "Merge branch 'main' into merogge/comment-help" This reverts commit c9b51ac84a44841fcd4483ba0a2e82d6893bb5ff, reversing changes made to d5411935e99d0e14a72358c38a9e95d5b6124d57. --- build/darwin/create-universal-app.js | 6 +- build/lib/layersChecker.js | 16 +- build/linux/debian/dep-lists.js | 8 +- build/linux/rpm/dep-lists.js | 4 +- extensions/git/src/historyProvider.ts | 20 +- extensions/shellscript/cgmanifest.json | 2 +- .../syntaxes/shell-unix-bash.tmLanguage.json | 6 +- package.json | 4 +- remote/package.json | 2 +- remote/yarn.lock | 8 +- .../base/browser/ui/icons/iconSelectBox.css | 38 --- src/vs/base/browser/ui/icons/iconSelectBox.ts | 287 ------------------ src/vs/base/common/codicons.ts | 2 +- src/vs/base/test/common/fuzzyScorer.test.ts | 10 +- src/vs/code/electron-main/app.ts | 2 +- .../issue/issueReporterService.ts | 5 +- .../linesSliceCharSequence.ts | 2 +- .../browser/linesOperations.ts | 4 +- .../editor/test/node/diffing/fixtures.test.ts | 11 +- .../legacy.expected.diff.json | 8 +- .../deletion/advanced.expected.diff.json | 2 +- .../advanced.expected.diff.json | 4 +- .../difficult-move/legacy.expected.diff.json | 28 +- .../advanced.expected.diff.json | 28 +- .../diffing/fixtures/import-shifting/1.tst | 3 - .../diffing/fixtures/import-shifting/2.tst | 3 - .../advanced.expected.diff.json | 22 -- .../import-shifting/legacy.expected.diff.json | 22 -- .../advanced.expected.diff.json | 12 +- .../legacy.expected.diff.json | 12 +- .../advanced.expected.diff.json | 4 +- .../advanced.expected.diff.json | 4 +- .../legacy.expected.diff.json | 8 +- .../advanced.expected.diff.json | 4 +- .../just-whitespace/legacy.expected.diff.json | 4 +- .../legacy.expected.diff.json | 4 +- .../move-1/advanced.expected.diff.json | 8 +- .../noise-1/advanced.expected.diff.json | 4 +- .../random-match-2/legacy.expected.diff.json | 4 +- .../advanced.expected.diff.json | 4 +- .../random-match-3/legacy.expected.diff.json | 4 +- .../subword/advanced.expected.diff.json | 4 +- .../trivial/advanced.expected.diff.json | 4 +- .../advanced.expected.diff.json | 12 +- .../ts-advanced-bug/legacy.expected.diff.json | 12 +- .../ts-class/advanced.expected.diff.json | 8 +- .../ts-class/legacy.expected.diff.json | 4 +- .../advanced.expected.diff.json | 4 +- .../ts-confusing-2/legacy.expected.diff.json | 12 +- .../advanced.expected.diff.json | 4 +- .../advanced.expected.diff.json | 4 +- .../legacy.expected.diff.json | 4 +- .../ts-methods/legacy.expected.diff.json | 4 +- .../legacy.expected.diff.json | 4 +- .../advanced.expected.diff.json | 4 +- .../legacy.expected.diff.json | 4 +- .../ws-alignment/legacy.expected.diff.json | 16 +- .../common/externalTerminal.ts | 6 + .../externalTerminalMainService.ts} | 3 + .../externalTerminalService.ts | 16 - .../node/externalTerminalService.ts | 8 +- src/vs/platform/files/common/fileService.ts | 65 ++-- src/vs/platform/files/common/files.ts | 3 - .../common/inMemoryFilesystemProvider.ts | 77 +---- .../files/test/browser/fileService.test.ts | 100 +----- .../test/common/nullFileSystemProvider.ts | 19 +- .../userData/common/fileUserDataProvider.ts | 97 +++--- .../test/browser/fileUserDataProvider.test.ts | 12 +- src/vs/workbench/api/browser/mainThreadSCM.ts | 101 +++--- .../workbench/api/common/extHost.protocol.ts | 21 +- src/vs/workbench/api/common/extHostSCM.ts | 9 +- src/vs/workbench/browser/dnd.ts | 4 +- src/vs/workbench/browser/iconSelectBox.ts | 114 ------- .../parts/editor/media/editorplaceholder.css | 2 - .../parts/titlebar/commandCenterControl.ts | 2 +- .../contrib/chat/browser/chatInputPart.ts | 2 +- .../contrib/chat/browser/chatListRenderer.ts | 22 +- .../browser/chatVariableReferenceRenderer.ts | 36 --- .../contrib/chat/browser/media/chat.css | 8 - .../contrib/chat/common/chatServiceImpl.ts | 19 +- .../emptyTextEditorHint.ts | 17 +- .../contrib/comments/browser/commentNode.ts | 2 +- .../comments/browser/commentService.ts | 2 +- .../comments/browser/commentThreadWidget.ts | 2 +- .../comments/browser/simpleCommentEditor.ts | 4 +- .../externalTerminal.contribution.ts | 6 +- .../files/browser/editors/fileEditorInput.ts | 4 +- .../browser/preferences.contribution.ts | 8 +- .../preferences/browser/settingsEditor2.ts | 9 +- .../contrib/scm/browser/media/scm.css | 4 - .../contrib/scm/browser/scmSyncViewPane.ts | 134 ++------ .../workbench/contrib/scm/common/history.ts | 16 +- src/vs/workbench/contrib/scm/common/scm.ts | 3 +- .../browser/commands/configureSnippets.ts | 4 +- .../tasks/browser/abstractTaskService.ts | 2 - .../tasks/browser/runAutomaticTasks.ts | 19 +- .../tasks/browser/task.contribution.ts | 4 +- .../contrib/tasks/common/taskService.ts | 1 - .../terminal/browser/terminalActions.ts | 2 +- .../themes/browser/themes.contribution.ts | 4 +- .../browser/userDataProfile.ts | 4 +- .../userDataSync/browser/userDataSync.ts | 25 +- .../dialogs/browser/simpleFileDialog.ts | 16 +- .../test/browser/workbenchTestServices.ts | 2 +- src/vs/workbench/workbench.common.main.ts | 1 - .../vscode.proposed.chatAgents.d.ts | 2 + .../vscode.proposed.scmHistoryProvider.d.ts | 4 +- yarn.lock | 16 +- 108 files changed, 443 insertions(+), 1357 deletions(-) delete mode 100644 src/vs/base/browser/ui/icons/iconSelectBox.css delete mode 100644 src/vs/base/browser/ui/icons/iconSelectBox.ts delete mode 100644 src/vs/editor/test/node/diffing/fixtures/import-shifting/1.tst delete mode 100644 src/vs/editor/test/node/diffing/fixtures/import-shifting/2.tst delete mode 100644 src/vs/editor/test/node/diffing/fixtures/import-shifting/advanced.expected.diff.json delete mode 100644 src/vs/editor/test/node/diffing/fixtures/import-shifting/legacy.expected.diff.json rename src/vs/platform/externalTerminal/{electron-main/externalTerminal.ts => electron-sandbox/externalTerminalMainService.ts} (81%) delete mode 100644 src/vs/platform/externalTerminal/electron-sandbox/externalTerminalService.ts delete mode 100644 src/vs/workbench/browser/iconSelectBox.ts delete mode 100644 src/vs/workbench/contrib/chat/browser/chatVariableReferenceRenderer.ts diff --git a/build/darwin/create-universal-app.js b/build/darwin/create-universal-app.js index 08380169335ae7..a01c222c35e35e 100644 --- a/build/darwin/create-universal-app.js +++ b/build/darwin/create-universal-app.js @@ -32,8 +32,8 @@ async function main(buildDir) { 'Credits.rtf', 'CodeResources', 'fsevents.node', - 'Info.plist', // TODO@deepak1556: regressed with 11.4.2 internal builds - 'MainMenu.nib', // Generated sequence is not deterministic with Xcode 13 + 'Info.plist', + 'MainMenu.nib', '.npmrc' ], outAppPath, @@ -57,4 +57,4 @@ if (require.main === module) { process.exit(1); }); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXVuaXZlcnNhbC1hcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGUtdW5pdmVyc2FsLWFwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsdUVBQTREO0FBQzVELHFFQUFvRDtBQUVwRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUVuRCxLQUFLLFVBQVUsSUFBSSxDQUFDLFFBQWlCO0lBQ3BDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFeEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQUMxQztJQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDL0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNuRyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFakcsTUFBTSxJQUFBLDJDQUFnQixFQUFDO1FBQ3RCLFVBQVU7UUFDVixZQUFZO1FBQ1osV0FBVztRQUNYLGFBQWE7UUFDYixXQUFXLEVBQUU7WUFDWixjQUFjO1lBQ2QsYUFBYTtZQUNiLGVBQWU7WUFDZixlQUFlO1lBQ2YsWUFBWSxFQUFFLHlEQUF5RDtZQUN2RSxjQUFjLEVBQUUsd0RBQXdEO1lBQ3hFLFFBQVE7U0FDUjtRQUNELFVBQVU7UUFDVixLQUFLLEVBQUUsSUFBSTtLQUNYLENBQUMsQ0FBQztJQUVILE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUN6RSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtRQUMxQixzQkFBc0IsRUFBRSxrQkFBa0I7S0FDMUMsQ0FBQyxDQUFDO0lBQ0gsRUFBRSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFM0Usa0RBQWtEO0lBQ2xELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBQSwyQkFBSyxFQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUMvRSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUEsMkJBQUssRUFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssY0FBYyxFQUFFO1FBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLFVBQVUsRUFBRSxDQUFDLENBQUM7S0FDckQ7QUFDRixDQUFDO0FBRUQsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtJQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNqQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakIsQ0FBQyxDQUFDLENBQUM7Q0FDSCJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXVuaXZlcnNhbC1hcHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGUtdW5pdmVyc2FsLWFwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsdUVBQTREO0FBQzVELHFFQUFvRDtBQUVwRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUVuRCxLQUFLLFVBQVUsSUFBSSxDQUFDLFFBQWlCO0lBQ3BDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFeEMsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztLQUMxQztJQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDL0YsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNuRyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFakcsTUFBTSxJQUFBLDJDQUFnQixFQUFDO1FBQ3RCLFVBQVU7UUFDVixZQUFZO1FBQ1osV0FBVztRQUNYLGFBQWE7UUFDYixXQUFXLEVBQUU7WUFDWixjQUFjO1lBQ2QsYUFBYTtZQUNiLGVBQWU7WUFDZixlQUFlO1lBQ2YsWUFBWTtZQUNaLGNBQWM7WUFDZCxRQUFRO1NBQ1I7UUFDRCxVQUFVO1FBQ1YsS0FBSyxFQUFFLElBQUk7S0FDWCxDQUFDLENBQUM7SUFFSCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDekUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7UUFDMUIsc0JBQXNCLEVBQUUsa0JBQWtCO0tBQzFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTNFLGtEQUFrRDtJQUNsRCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUEsMkJBQUssRUFBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDL0UsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFBLDJCQUFLLEVBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRixJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLGNBQWMsRUFBRTtRQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixVQUFVLEVBQUUsQ0FBQyxDQUFDO0tBQ3JEO0FBQ0YsQ0FBQztBQUVELElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7SUFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDakMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDO0NBQ0gifQ== \ No newline at end of file diff --git a/build/lib/layersChecker.js b/build/lib/layersChecker.js index 9cae94895e963c..618c736b30a7f1 100644 --- a/build/lib/layersChecker.js +++ b/build/lib/layersChecker.js @@ -23,7 +23,7 @@ const minimatch_1 = require("minimatch"); // Types we assume are present in all implementations of JS VMs (node.js, browsers) // Feel free to add more core types as you see needed if present in node.js and browsers const CORE_TYPES = [ - 'require', // from our AMD loader + 'require', 'setTimeout', 'clearTimeout', 'setInterval', @@ -91,7 +91,7 @@ const RULES = [ ], disallowedTypes: NATIVE_TYPES, disallowedDefinitions: [ - 'lib.dom.d.ts', // no DOM + 'lib.dom.d.ts', '@types/node' // no node.js ] }, @@ -101,7 +101,7 @@ const RULES = [ allowedTypes: CORE_TYPES, disallowedTypes: [ /* Ignore native types that are defined from here */], disallowedDefinitions: [ - 'lib.dom.d.ts', // no DOM + 'lib.dom.d.ts', '@types/node' // no node.js ] }, @@ -111,7 +111,7 @@ const RULES = [ allowedTypes: CORE_TYPES, disallowedTypes: [ /* Ignore native types that are defined from here */], disallowedDefinitions: [ - 'lib.dom.d.ts', // no DOM + 'lib.dom.d.ts', '@types/node' // no node.js ] }, @@ -121,7 +121,7 @@ const RULES = [ allowedTypes: CORE_TYPES, disallowedTypes: [ /* Ignore native types that are defined from here */], disallowedDefinitions: [ - 'lib.dom.d.ts', // no DOM + 'lib.dom.d.ts', '@types/node' // no node.js ] }, @@ -135,7 +135,7 @@ const RULES = [ ], disallowedTypes: NATIVE_TYPES, disallowedDefinitions: [ - 'lib.dom.d.ts', // no DOM + 'lib.dom.d.ts', '@types/node' // no node.js ] }, @@ -145,7 +145,7 @@ const RULES = [ allowedTypes: CORE_TYPES, disallowedTypes: NATIVE_TYPES, disallowedDefinitions: [ - 'lib.dom.d.ts', // no DOM + 'lib.dom.d.ts', '@types/node' // no node.js ] }, @@ -288,4 +288,4 @@ for (const sourceFile of program.getSourceFiles()) { if (hasErrors) { process.exit(1); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXJzQ2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxheWVyc0NoZWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyxpQ0FBaUM7QUFDakMsMkJBQThDO0FBQzlDLCtCQUE4QztBQUM5Qyx5Q0FBa0M7QUFFbEMsRUFBRTtBQUNGLGdHQUFnRztBQUNoRyxFQUFFO0FBQ0YsK0ZBQStGO0FBQy9GLG1EQUFtRDtBQUNuRCw0RUFBNEU7QUFDNUUsaUVBQWlFO0FBQ2pFLEVBQUU7QUFDRixnR0FBZ0c7QUFDaEcsRUFBRTtBQUNGLGdHQUFnRztBQUNoRyxFQUFFO0FBRUYsbUZBQW1GO0FBQ25GLHdGQUF3RjtBQUN4RixNQUFNLFVBQVUsR0FBRztJQUNsQixTQUFTLEVBQUUsc0JBQXNCO0lBQ2pDLFlBQVk7SUFDWixjQUFjO0lBQ2QsYUFBYTtJQUNiLGVBQWU7SUFDZixTQUFTO0lBQ1QsU0FBUztJQUNULE9BQU87SUFDUCxrQkFBa0I7SUFDbEIsUUFBUTtJQUNSLGFBQWE7SUFDYixhQUFhO0lBQ2IsTUFBTTtJQUNOLGdCQUFnQjtJQUNoQixPQUFPO0lBQ1AsWUFBWTtJQUNaLGFBQWE7SUFDYixhQUFhO0lBQ2IsV0FBVztJQUNYLFlBQVk7SUFDWixZQUFZO0lBQ1osY0FBYztJQUNkLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixNQUFNO0lBQ04sTUFBTTtJQUNOLGlCQUFpQjtJQUNqQixhQUFhO0lBQ2IsZ0JBQWdCO0lBQ2hCLGFBQWE7SUFDYixLQUFLO0lBQ0wsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixPQUFPO0lBQ1AsYUFBYTtJQUNiLGtCQUFrQjtJQUNsQixhQUFhO0lBQ2IsTUFBTTtDQUNOLENBQUM7QUFFRixvRUFBb0U7QUFDcEUsb0VBQW9FO0FBQ3BFLE1BQU0sWUFBWSxHQUFHO0lBQ3BCLGtCQUFrQjtJQUNsQiwyQkFBMkI7SUFDM0Isa0NBQWtDO0lB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXJzQ2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxheWVyc0NoZWNrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyxpQ0FBaUM7QUFDakMsMkJBQThDO0FBQzlDLCtCQUE4QztBQUM5Qyx5Q0FBa0M7QUFFbEMsRUFBRTtBQUNGLGdHQUFnRztBQUNoRyxFQUFFO0FBQ0YsK0ZBQStGO0FBQy9GLG1EQUFtRDtBQUNuRCw0RUFBNEU7QUFDNUUsaUVBQWlFO0FBQ2pFLEVBQUU7QUFDRixnR0FBZ0c7QUFDaEcsRUFBRTtBQUNGLGdHQUFnRztBQUNoRyxFQUFFO0FBRUYsbUZBQW1GO0FBQ25GLHdGQUF3RjtBQUN4RixNQUFNLFVBQVUsR0FBRztJQUNsQixTQUFTO0lBQ1QsWUFBWTtJQUNaLGNBQWM7SUFDZCxhQUFhO0lBQ2IsZUFBZTtJQUNmLFNBQVM7SUFDVCxTQUFTO0lBQ1QsT0FBTztJQUNQLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1IsYUFBYTtJQUNiLGFBQWE7SUFDYixNQUFNO0lBQ04sZ0JBQWdCO0lBQ2hCLE9BQU87SUFDUCxZQUFZO0lBQ1osYUFBYTtJQUNiLGFBQWE7SUFDYixXQUFXO0lBQ1gsWUFBWTtJQUNaLFlBQVk7SUFDWixjQUFjO0lBQ2QsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixnQkFBZ0I7SUFDaEIsZUFBZTtJQUNmLE1BQU07SUFDTixNQUFNO0lBQ04saUJBQWlCO0lBQ2pCLGFBQWE7SUFDYixnQkFBZ0I7SUFDaEIsYUFBYTtJQUNiLEtBQUs7SUFDTCxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLE9BQU87SUFDUCxhQUFhO0lBQ2Isa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixNQUFNO0NBQ04sQ0FBQztBQUVGLG9FQUFvRTtBQUNwRSxvRUFBb0U7QUFDcEUsTUFBTSxZQUFZLEdBQUc7SUFDcEIsa0JBQWtCO0lBQ2xCLDJCQUEyQjtJQUMzQixrQ0FBa0M7SUFDbEMsNEJBQTRCO0lB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 \ No newline at end of file diff --git a/build/linux/debian/dep-lists.js b/build/linux/debian/dep-lists.js index 16e27eedf0186e..e60b340b45e61d 100644 --- a/build/linux/debian/dep-lists.js +++ b/build/linux/debian/dep-lists.js @@ -8,11 +8,11 @@ exports.referenceGeneratedDepsByArch = exports.recommendedDeps = exports.additio // Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/debian/additional_deps // Additional dependencies not in the dpkg-shlibdeps output. exports.additionalDeps = [ - 'ca-certificates', // Make sure users have SSL certificates. + 'ca-certificates', 'libgtk-3-0 (>= 3.9.10) | libgtk-4-1', 'libnss3 (>= 3.26)', - 'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3', // For Breakpad crash reports. - 'xdg-utils (>= 1.0.2)', // OS integration + 'libcurl3-gnutls | libcurl3-nss | libcurl4 | libcurl3', + 'xdg-utils (>= 1.0.2)', 'libgssapi-krb5-2', 'libkrb5-3', ]; @@ -140,4 +140,4 @@ exports.referenceGeneratedDepsByArch = { 'xdg-utils (>= 1.0.2)' ] }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwLWxpc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwLWxpc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7O0FBRWhHLGtIQUFrSDtBQUNsSCw0REFBNEQ7QUFDL0MsUUFBQSxjQUFjLEdBQUc7SUFDN0IsaUJBQWlCLEVBQUUseUNBQXlDO0lBQzVELHFDQUFxQztJQUNyQyxtQkFBbUI7SUFDbkIsc0RBQXNELEVBQUUsOEJBQThCO0lBQ3RGLHNCQUFzQixFQUFFLGlCQUFpQjtJQUN6QyxrQkFBa0I7SUFDbEIsV0FBVztDQUNYLENBQUM7QUFFRixvSEFBb0g7QUFDcEgsMENBQTBDO0FBQzFDLDhEQUE4RDtBQUNqRCxRQUFBLGVBQWUsR0FBRztJQUM5QixZQUFZLENBQUMseUVBQXlFO0NBQ3RGLENBQUM7QUFFVyxRQUFBLDRCQUE0QixHQUFHO0lBQzNDLE9BQU8sRUFBRTtRQUNSLGlCQUFpQjtRQUNqQix3QkFBd0I7UUFDeEIsK0JBQStCO1FBQy9CLHdCQUF3QjtRQUN4QiwyQkFBMkI7UUFDM0IsaUJBQWlCO1FBQ2pCLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLHNCQUFzQjtRQUN0QixzREFBc0Q7UUFDdEQseUJBQXlCO1FBQ3pCLHFCQUFxQjtRQUNyQixzQkFBc0I7UUFDdEIseUJBQXlCO1FBQ3pCLDBCQUEwQjtRQUMxQixrQkFBa0I7UUFDbEIsd0JBQXdCO1FBQ3hCLHFDQUFxQztRQUNyQyxXQUFXO1FBQ1gsd0JBQXdCO1FBQ3hCLHFCQUFxQjtRQUNyQixtQkFBbUI7UUFDbkIsNEJBQTRCO1FBQzVCLFVBQVU7UUFDViwwQkFBMEI7UUFDMUIsb0JBQW9CO1FBQ3BCLCtCQUErQjtRQUMvQix3QkFBd0I7UUFDeEIsVUFBVTtRQUNWLFlBQVk7UUFDWiwwQkFBMEI7UUFDMUIsYUFBYTtRQUNiLFlBQVk7UUFDWixzQkFBc0I7S0FDdEI7SUFDRCxPQUFPLEVBQUU7UUFDUixpQkFBaUI7UUFDakIsd0JBQXdCO1FBQ3hCLCtCQUErQjtRQUMvQix3QkFBd0I7UUFDeEIsMkJBQTJCO1FBQzNCLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLHNCQUFzQjtRQUN0QixzREFBc0Q7UUFDdEQseUJBQXlCO1FBQ3pCLHFCQUFxQjtRQUNyQixzQkFBc0I7UUFDdEIseUJBQXlCO1FBQ3pCLDBCQUEwQjtRQUMxQixrQkFBa0I7UUFDbEIsd0JBQXdCO1FBQ3hCLHFDQUFxQztRQUNyQyxXQUFXO1FBQ1gsd0JBQXdCO1FBQ3hCLHFCQUFxQjtRQUNyQixtQkFBbUI7UUFDbkIsNEJBQTRCO1FBQzVCLG1CQUFtQjtRQUNuQixxQkFBcUI7UUFDckIsbUJBQW1CO1FBQ25CLFVBQVU7UUFDViwwQkFBMEI7UUFDMUIsb0JBQW9CO1FBQ3BCLCtCQUErQjtRQUMvQix3QkFBd0I7UUFDeEIsVUFBVTtRQUNWLFlBQVk7UUFDWiwwQkFBMEI7UUFDMUIsYUFBYTtRQUNiLFlBQVk7UUFDWixzQkFBc0I7S0FDdEI7SUFDRCxPQUFPLEVBQUU7UUFDUixpQkFBaUI7UUFDakIsd0JBQXdCO1FBQ3hCLCtCQUErQjtRQUMvQix3QkFBd0I7UUFDeEIsMkJBQTJCO1FBQzNCLGlCQUFpQjtRQUNqQixzQkFBc0I7UUFDdEIsc0RBQXNEO1FBQ3RELHdCQUF3QjtRQUN4QixxQkFBcUI7UUFDckIsc0JBQXNCO1FBQ3RCLHlCQUF5QjtRQUN6QiwwQkFBMEI7UUFDMUIsa0JBQWtCO1FBQ2xCLHdCQUF3QjtRQUN4QixxQ0FBcUM7UUFDckMsV0FBVztRQUNYLHdCQUF3QjtRQUN4QixxQkFBcUI7UUFDckIsbUJBQW1CO1FBQ25CLDRCQUE0QjtRQUM1QixtQkFBbUI7UUFDbkIscUJBQXFCO1FBQ3JCLG1CQUFtQjtRQUNuQixVQUFVO1FBQ1YsMEJBQTBCO1FBQzFCLG9CQUFvQjtRQUNwQiwrQkFBK0I7UUFDL0Isd0JBQXdCO1FBQ3hCLFVBQVU7UUFDVixZQUFZO1FBQ1osMEJBQTBCO1FBQzFCLGFBQWE7UUFDYixZQUFZO1FBQ1osc0JBQXNCO0tBQ3RCO0NBQ0QsQ0FBQyJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwLWxpc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwLWxpc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7O0FBRWhHLGtIQUFrSDtBQUNsSCw0REFBNEQ7QUFDL0MsUUFBQSxjQUFjLEdBQUc7SUFDN0IsaUJBQWlCO0lBQ2pCLHFDQUFxQztJQUNyQyxtQkFBbUI7SUFDbkIsc0RBQXNEO0lBQ3RELHNCQUFzQjtJQUN0QixrQkFBa0I7SUFDbEIsV0FBVztDQUNYLENBQUM7QUFFRixvSEFBb0g7QUFDcEgsMENBQTBDO0FBQzFDLDhEQUE4RDtBQUNqRCxRQUFBLGVBQWUsR0FBRztJQUM5QixZQUFZLENBQUMseUVBQXlFO0NBQ3RGLENBQUM7QUFFVyxRQUFBLDRCQUE0QixHQUFHO0lBQzNDLE9BQU8sRUFBRTtRQUNSLGlCQUFpQjtRQUNqQix3QkFBd0I7UUFDeEIsK0JBQStCO1FBQy9CLHdCQUF3QjtRQUN4QiwyQkFBMkI7UUFDM0IsaUJBQWlCO1FBQ2pCLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLHNCQUFzQjtRQUN0QixzREFBc0Q7UUFDdEQseUJBQXlCO1FBQ3pCLHFCQUFxQjtRQUNyQixzQkFBc0I7UUFDdEIseUJBQXlCO1FBQ3pCLDBCQUEwQjtRQUMxQixrQkFBa0I7UUFDbEIsd0JBQXdCO1FBQ3hCLHFDQUFxQztRQUNyQyxXQUFXO1FBQ1gsd0JBQXdCO1FBQ3hCLHFCQUFxQjtRQUNyQixtQkFBbUI7UUFDbkIsNEJBQTRCO1FBQzVCLFVBQVU7UUFDViwwQkFBMEI7UUFDMUIsb0JBQW9CO1FBQ3BCLCtCQUErQjtRQUMvQix3QkFBd0I7UUFDeEIsVUFBVTtRQUNWLFlBQVk7UUFDWiwwQkFBMEI7UUFDMUIsYUFBYTtRQUNiLFlBQVk7UUFDWixzQkFBc0I7S0FDdEI7SUFDRCxPQUFPLEVBQUU7UUFDUixpQkFBaUI7UUFDakIsd0JBQXdCO1FBQ3hCLCtCQUErQjtRQUMvQix3QkFBd0I7UUFDeEIsMkJBQTJCO1FBQzNCLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEIsZ0JBQWdCO1FBQ2hCLHNCQUFzQjtRQUN0QixzREFBc0Q7UUFDdEQseUJBQXlCO1FBQ3pCLHFCQUFxQjtRQUNyQixzQkFBc0I7UUFDdEIseUJBQXlCO1FBQ3pCLDBCQUEwQjtRQUMxQixrQkFBa0I7UUFDbEIsd0JBQXdCO1FBQ3hCLHFDQUFxQztRQUNyQyxXQUFXO1FBQ1gsd0JBQXdCO1FBQ3hCLHFCQUFxQjtRQUNyQixtQkFBbUI7UUFDbkIsNEJBQTRCO1FBQzVCLG1CQUFtQjtRQUNuQixxQkFBcUI7UUFDckIsbUJBQW1CO1FBQ25CLFVBQVU7UUFDViwwQkFBMEI7UUFDMUIsb0JBQW9CO1FBQ3BCLCtCQUErQjtRQUMvQix3QkFBd0I7UUFDeEIsVUFBVTtRQUNWLFlBQVk7UUFDWiwwQkFBMEI7UUFDMUIsYUFBYTtRQUNiLFlBQVk7UUFDWixzQkFBc0I7S0FDdEI7SUFDRCxPQUFPLEVBQUU7UUFDUixpQkFBaUI7UUFDakIsd0JBQXdCO1FBQ3hCLCtCQUErQjtRQUMvQix3QkFBd0I7UUFDeEIsMkJBQTJCO1FBQzNCLGlCQUFpQjtRQUNqQixzQkFBc0I7UUFDdEIsc0RBQXNEO1FBQ3RELHdCQUF3QjtRQUN4QixxQkFBcUI7UUFDckIsc0JBQXNCO1FBQ3RCLHlCQUF5QjtRQUN6QiwwQkFBMEI7UUFDMUIsa0JBQWtCO1FBQ2xCLHdCQUF3QjtRQUN4QixxQ0FBcUM7UUFDckMsV0FBVztRQUNYLHdCQUF3QjtRQUN4QixxQkFBcUI7UUFDckIsbUJBQW1CO1FBQ25CLDRCQUE0QjtRQUM1QixtQkFBbUI7UUFDbkIscUJBQXFCO1FBQ3JCLG1CQUFtQjtRQUNuQixVQUFVO1FBQ1YsMEJBQTBCO1FBQzFCLG9CQUFvQjtRQUNwQiwrQkFBK0I7UUFDL0Isd0JBQXdCO1FBQ3hCLFVBQVU7UUFDVixZQUFZO1FBQ1osMEJBQTBCO1FBQzFCLGFBQWE7UUFDYixZQUFZO1FBQ1osc0JBQXNCO0tBQ3RCO0NBQ0QsQ0FBQyJ9 \ No newline at end of file diff --git a/build/linux/rpm/dep-lists.js b/build/linux/rpm/dep-lists.js index c97574a083b01b..667d207ca9d9ae 100644 --- a/build/linux/rpm/dep-lists.js +++ b/build/linux/rpm/dep-lists.js @@ -8,7 +8,7 @@ exports.referenceGeneratedDepsByArch = exports.additionalDeps = void 0; // Based on https://source.chromium.org/chromium/chromium/src/+/main:chrome/installer/linux/rpm/additional_deps // Additional dependencies not in the rpm find-requires output. exports.additionalDeps = [ - 'ca-certificates', // Make sure users have SSL certificates. + 'ca-certificates', 'libgtk-3.so.0()(64bit)', 'libnss3.so(NSS_3.22)(64bit)', 'libssl3.so(NSS_3.28)(64bit)', @@ -302,4 +302,4 @@ exports.referenceGeneratedDepsByArch = { 'xdg-utils' ] }; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwLWxpc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwLWxpc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7O0FBRWhHLCtHQUErRztBQUMvRywrREFBK0Q7QUFDbEQsUUFBQSxjQUFjLEdBQUc7SUFDN0IsaUJBQWlCLEVBQUUseUNBQXlDO0lBQzVELHdCQUF3QjtJQUN4Qiw2QkFBNkI7SUFDN0IsNkJBQTZCO0lBQzdCLGdDQUFnQztJQUNoQyx5QkFBeUI7SUFDekIsdUJBQXVCO0lBQ3ZCLFdBQVcsQ0FBQyxpQkFBaUI7Q0FDN0IsQ0FBQztBQUVXLFFBQUEsNEJBQTRCLEdBQUc7SUFDM0MsUUFBUSxFQUFFO1FBQ1QsaUJBQWlCO1FBQ2pCLCtCQUErQjtRQUMvQiwwQ0FBMEM7UUFDMUMsd0NBQXdDO1FBQ3hDLHNCQUFzQjtRQUN0Qiw2QkFBNkI7UUFDN0IsMEJBQTBCO1FBQzFCLHVCQUF1QjtRQUN2Qix5QkFBeUI7UUFDekIseUJBQXlCO1FBQ3pCLHlCQUF5QjtRQUN6QixpQ0FBaUM7UUFDakMsc0NBQXNDO1FBQ3RDLDBCQUEwQjtRQUMxQixpQ0FBaUM7UUFDakMsd0JBQXdCO1FBQ3hCLG9CQUFvQjtRQUNwQiw4QkFBOEI7UUFDOUIsOEJBQThCO1FBQzlCLDhCQUE4QjtRQUM5Qiw4QkFBOEI7UUFDOUIsOEJBQThCO1FBQzlCLDhCQUE4QjtRQUM5QiwrQkFBK0I7UUFDL0IsNkJBQTZCO1FBQzdCLCtCQUErQjtRQUMvQiwrQkFBK0I7UUFDL0IsK0JBQStCO1FBQy9CLDZCQUE2QjtRQUM3Qiw2QkFBNkI7UUFDN0IsNkJBQTZCO1FBQzdCLDZCQUE2QjtRQUM3Qiw2QkFBNkI7UUFDN0Isd0JBQXdCO1FBQ3hCLHVCQUF1QjtRQUN2Qix5QkFBeUI7UUFDekIscUJBQXFCO1FBQ3JCLGdDQUFnQztRQUNoQyxzQkFBc0I7UUFDdEIsd0JBQXdCO1FBQ3hCLHNCQUFzQjtRQUN0Qix3QkFBd0I7UUFDeEIsK0JBQStCO1FB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 \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwLWxpc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVwLWxpc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7O0FBRWhHLCtHQUErRztBQUMvRywrREFBK0Q7QUFDbEQsUUFBQSxjQUFjLEdBQUc7SUFDN0IsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4Qiw2QkFBNkI7SUFDN0IsNkJBQTZCO0lBQzdCLGdDQUFnQztJQUNoQyx5QkFBeUI7SUFDekIsdUJBQXVCO0lBQ3ZCLFdBQVcsQ0FBQyxpQkFBaUI7Q0FDN0IsQ0FBQztBQUVXLFFBQUEsNEJBQTRCLEdBQUc7SUFDM0MsUUFBUSxFQUFFO1FBQ1QsaUJBQWlCO1FBQ2pCLCtCQUErQjtRQUMvQiwwQ0FBMEM7UUFDMUMsd0NBQXdDO1FBQ3hDLHNCQUFzQjtRQUN0Qiw2QkFBNkI7UUFDN0IsMEJBQTBCO1FBQzFCLHVCQUF1QjtRQUN2Qix5QkFBeUI7UUFDekIseUJBQXlCO1FBQ3pCLHlCQUF5QjtRQUN6QixpQ0FBaUM7UUFDakMsc0NBQXNDO1FBQ3RDLDBCQUEwQjtRQUMxQixpQ0FBaUM7UUFDakMsd0JBQXdCO1FBQ3hCLG9CQUFvQjtRQUNwQiw4QkFBOEI7UUFDOUIsOEJBQThCO1FBQzlCLDhCQUE4QjtRQUM5Qiw4QkFBOEI7UUFDOUIsOEJBQThCO1FBQzlCLDhCQUE4QjtRQUM5QiwrQkFBK0I7UUFDL0IsNkJBQTZCO1FBQzdCLCtCQUErQjtRQUMvQiwrQkFBK0I7UUFDL0IsK0JBQStCO1FBQy9CLDZCQUE2QjtRQUM3Qiw2QkFBNkI7UUFDN0IsNkJBQTZCO1FBQzdCLDZCQUE2QjtRQUM3Qiw2QkFBNkI7UUFDN0Isd0JBQXdCO1FBQ3hCLHVCQUF1QjtRQUN2Qix5QkFBeUI7UUFDekIscUJBQXFCO1FBQ3JCLGdDQUFnQztRQUNoQyxzQkFBc0I7UUFDdEIsd0JBQXdCO1FBQ3hCLHNCQUFzQjtRQUN0Qix3QkFBd0I7UUFDeEIsK0JBQStCO1FBQy9CLDBCQUEwQjtR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 \ No newline at end of file diff --git a/extensions/git/src/historyProvider.ts b/extensions/git/src/historyProvider.ts index 0b3f6e1075e08a..3e3862ae65fae9 100644 --- a/extensions/git/src/historyProvider.ts +++ b/extensions/git/src/historyProvider.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ -import { Disposable, Event, EventEmitter, SourceControlActionButton, SourceControlHistoryItem, SourceControlHistoryItemChange, SourceControlHistoryItemGroup, SourceControlHistoryOptions, SourceControlHistoryProvider, ThemeIcon, l10n } from 'vscode'; +import { Disposable, Event, EventEmitter, SourceControlActionButton, SourceControlHistoryItem, SourceControlHistoryItemChange, SourceControlHistoryItemGroup, SourceControlHistoryOptions, SourceControlHistoryProvider, ThemeIcon } from 'vscode'; import { Repository } from './repository'; import { IDisposable } from './util'; import { toGitUri } from './uri'; @@ -106,22 +106,12 @@ export class GitHistoryProvider implements SourceControlHistoryProvider, IDispos })); } - async resolveHistoryItemGroupBase(historyItemGroupId: string): Promise { - // TODO - support for all history item groups - if (historyItemGroupId !== this.currentHistoryItemGroup?.id) { + async resolveHistoryItemGroupCommonAncestor(refId1: string, refId2: string | undefined): Promise<{ id: string; ahead: number; behind: number } | undefined> { + refId2 = refId2 ?? (await this.repository.getDefaultBranch()).name ?? ''; + if (refId2 === '') { return undefined; } - if (this.currentHistoryItemGroup?.upstream) { - return this.currentHistoryItemGroup.upstream; - } - - // Default branch - const defaultBranch = await this.repository.getDefaultBranch(); - return defaultBranch.name ? { id: `refs/heads/${defaultBranch.name}`, label: defaultBranch.name } : undefined; - } - - async resolveHistoryItemGroupCommonAncestor(refId1: string, refId2: string): Promise<{ id: string; ahead: number; behind: number } | undefined> { const ancestor = await this.repository.getMergeBase(refId1, refId2); if (ancestor === '') { return undefined; @@ -133,7 +123,7 @@ export class GitHistoryProvider implements SourceControlHistoryProvider, IDispos private async getSummaryHistoryItem(ref1: string, ref2: string): Promise { const diffShortStat = await this.repository.diffBetweenShortStat(ref1, ref2); - return { id: `${ref1}..${ref2}`, parentIds: [], icon: new ThemeIcon('files'), label: l10n.t('All Changes'), description: diffShortStat }; + return { id: `${ref1}..${ref2}`, parentIds: [], icon: new ThemeIcon('files'), label: 'Changes', description: diffShortStat }; } dispose(): void { diff --git a/extensions/shellscript/cgmanifest.json b/extensions/shellscript/cgmanifest.json index dbb4301b62ce91..f246d45fe21b4d 100644 --- a/extensions/shellscript/cgmanifest.json +++ b/extensions/shellscript/cgmanifest.json @@ -6,7 +6,7 @@ "git": { "name": "jeff-hykin/better-shell-syntax", "repositoryUrl": "https://github.com/jeff-hykin/better-shell-syntax", - "commitHash": "a3de7b32f1537194a83ee848838402fbf4b67424" + "commitHash": "ce62ea59e8e522f8a07d8d8a2d1f992c6c600b91" } }, "license": "MIT", diff --git a/extensions/shellscript/syntaxes/shell-unix-bash.tmLanguage.json b/extensions/shellscript/syntaxes/shell-unix-bash.tmLanguage.json index 9950c577c48697..68055eb7b29efd 100644 --- a/extensions/shellscript/syntaxes/shell-unix-bash.tmLanguage.json +++ b/extensions/shellscript/syntaxes/shell-unix-bash.tmLanguage.json @@ -4,7 +4,7 @@ "If you want to provide a fix or improvement, please create a pull request against the original repository.", "Once accepted there, we are happy to receive an update request." ], - "version": "https://github.com/jeff-hykin/better-shell-syntax/commit/a3de7b32f1537194a83ee848838402fbf4b67424", + "version": "https://github.com/jeff-hykin/better-shell-syntax/commit/ce62ea59e8e522f8a07d8d8a2d1f992c6c600b91", "name": "Shell Script", "scopeName": "source.shell", "patterns": [ @@ -268,7 +268,7 @@ "patterns": [ { "begin": "(?=\\S)", - "end": ";;&?|;&", + "end": ";;", "endCaptures": { "0": { "name": "punctuation.terminator.case-clause.shell" @@ -311,7 +311,7 @@ }, { "begin": "(?<=\\))", - "end": "(?=;;&?|;&)", + "end": "(?=;;)", "name": "meta.scope.case-clause-body.shell", "patterns": [ { diff --git a/package.json b/package.json index 1940684eb1b8d0..cc298739be3673 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "@parcel/watcher": "2.1.0", "@vscode/iconv-lite-umd": "0.7.0", "@vscode/policy-watcher": "^1.1.4", - "@vscode/proxy-agent": "^0.17.4", + "@vscode/proxy-agent": "^0.17.3", "@vscode/ripgrep": "^1.15.5", "@vscode/spdlog": "^0.13.11", "@vscode/sqlite3": "5.1.6-vscode", @@ -210,7 +210,7 @@ "ts-loader": "^9.4.2", "ts-node": "^10.9.1", "tsec": "0.2.7", - "typescript": "^5.3.0-dev.20230919", + "typescript": "^5.3.0-dev.20230911", "typescript-formatter": "7.1.0", "underscore": "^1.12.1", "util": "^0.12.4", diff --git a/remote/package.json b/remote/package.json index 5da071b07241d3..fa7bd64e3d68e1 100644 --- a/remote/package.json +++ b/remote/package.json @@ -7,7 +7,7 @@ "@microsoft/1ds-post-js": "^3.2.13", "@parcel/watcher": "2.1.0", "@vscode/iconv-lite-umd": "0.7.0", - "@vscode/proxy-agent": "^0.17.4", + "@vscode/proxy-agent": "^0.17.3", "@vscode/ripgrep": "^1.15.5", "@vscode/spdlog": "^0.13.11", "@vscode/vscode-languagedetection": "1.0.21", diff --git a/remote/yarn.lock b/remote/yarn.lock index 21b77b54043c9e..040443b2631c7d 100644 --- a/remote/yarn.lock +++ b/remote/yarn.lock @@ -58,10 +58,10 @@ resolved "https://registry.yarnpkg.com/@vscode/iconv-lite-umd/-/iconv-lite-umd-0.7.0.tgz#d2f1e0664ee6036408f9743fee264ea0699b0e48" integrity sha512-bRRFxLfg5dtAyl5XyiVWz/ZBPahpOpPrNYnnHpOpUZvam4tKH35wdhP4Kj6PbM0+KdliOsPzbGWpkxcdpNB/sg== -"@vscode/proxy-agent@^0.17.4": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@vscode/proxy-agent/-/proxy-agent-0.17.4.tgz#e3ffb63357353a428436f15a69de3453a5061f0c" - integrity sha512-tX8eidofoJlZFRWzdiiW3wyu26hgIRk8HvM/RoP1wVSu3U/As36EgGIZYG6pPnqiythRqTcsddniVNA5M39g4w== +"@vscode/proxy-agent@^0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@vscode/proxy-agent/-/proxy-agent-0.17.3.tgz#ae46cb64d58a1a2ba063321eb4e3339eaba703b8" + integrity sha512-l+00ALcWQyDsW3kd22uOeAn84KHFkixnk/STiBFRxltbTiaiJsHCCpjlmX+x/RK+B97FcRLlg+MRRb7jtWAnng== dependencies: "@tootallnate/once" "^3.0.0" agent-base "^7.0.1" diff --git a/src/vs/base/browser/ui/icons/iconSelectBox.css b/src/vs/base/browser/ui/icons/iconSelectBox.css deleted file mode 100644 index 4e2278d04bc840..00000000000000 --- a/src/vs/base/browser/ui/icons/iconSelectBox.css +++ /dev/null @@ -1,38 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -.icon-select-box > .icon-select-box-container { - height: 100%; -} - -.icon-select-box .icon-select-icons-container { - height: 100%; - outline: 0 !important; -} - -.icon-select-box .icon-select-icons-container > .icon-container { - display: inline-flex; - cursor: pointer; - font-size: 20px; - align-items: center; - justify-content: center; - border-radius: 5px; -} - -.icon-select-box .icon-select-icons-container > .icon-container.focused { - outline: 1px dashed var(--vscode-toolbar-hoverOutline); - outline-offset: -1px; - background-color: var(--vscode-toolbar-hoverBackground); -} - -.icon-select-box .icon-select-id-container .icon-select-id-label { - height: 24px; - padding: 10px; - opacity: .8; -} - -.icon-select-box .icon-select-id-container .icon-select-id-label .highlight { - color: var(--vscode-list-highlightForeground); -} diff --git a/src/vs/base/browser/ui/icons/iconSelectBox.ts b/src/vs/base/browser/ui/icons/iconSelectBox.ts deleted file mode 100644 index c592c37d3f7ab2..00000000000000 --- a/src/vs/base/browser/ui/icons/iconSelectBox.ts +++ /dev/null @@ -1,287 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import 'vs/css!./iconSelectBox'; -import * as dom from 'vs/base/browser/dom'; -import { alert } from 'vs/base/browser/ui/aria/aria'; -import { IInputBoxStyles, InputBox } from 'vs/base/browser/ui/inputbox/inputBox'; -import { DomScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement'; -import { Emitter } from 'vs/base/common/event'; -import { IDisposable, DisposableStore, Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; -import { ThemeIcon } from 'vs/base/common/themables'; -import { localize } from 'vs/nls'; -import { IMatch } from 'vs/base/common/filters'; -import { ScrollbarVisibility } from 'vs/base/common/scrollable'; -import { HighlightedLabel } from 'vs/base/browser/ui/highlightedlabel/highlightedLabel'; - -export interface IIconSelectBoxOptions { - readonly icons: ThemeIcon[]; - readonly inputBoxStyles: IInputBoxStyles; -} - -interface IRenderedIconItem { - readonly icon: ThemeIcon; - readonly element: HTMLElement; - readonly highlightMatches?: IMatch[]; -} - -export class IconSelectBox extends Disposable { - - private static InstanceCount = 0; - readonly domId = `icon_select_box_id_${++IconSelectBox.InstanceCount}`; - - readonly domNode: HTMLElement; - - private _onDidSelect = this._register(new Emitter()); - readonly onDidSelect = this._onDidSelect.event; - - private renderedIcons: IRenderedIconItem[] = []; - - private focusedItemIndex: number = 0; - private numberOfElementsPerRow: number = 1; - - protected inputBox: InputBox | undefined; - private scrollableElement: DomScrollableElement | undefined; - private iconIdElement: HighlightedLabel | undefined; - private readonly iconContainerWidth = 36; - private readonly iconContainerHeight = 32; - - constructor( - private readonly options: IIconSelectBoxOptions, - ) { - super(); - this.domNode = dom.$('.icon-select-box'); - this._register(this.create()); - } - - private create(): IDisposable { - const disposables = new DisposableStore(); - - const iconSelectBoxContainer = dom.append(this.domNode, dom.$('.icon-select-box-container')); - iconSelectBoxContainer.style.margin = '10px 15px'; - - const iconSelectInputContainer = dom.append(iconSelectBoxContainer, dom.$('.icon-select-input-container')); - iconSelectInputContainer.style.paddingBottom = '10px'; - this.inputBox = disposables.add(new InputBox(iconSelectInputContainer, undefined, { - placeholder: localize('iconSelect.placeholder', "Search icons"), - inputBoxStyles: this.options.inputBoxStyles, - })); - - const iconsContainer = dom.$('.icon-select-icons-container', { id: `${this.domId}_icons` }); - iconsContainer.style.paddingRight = '10px'; - iconsContainer.role = 'listbox'; - iconsContainer.tabIndex = 0; - this.scrollableElement = disposables.add(new DomScrollableElement(iconsContainer, { - useShadows: false, - horizontal: ScrollbarVisibility.Hidden, - })); - dom.append(iconSelectBoxContainer, this.scrollableElement.getDomNode()); - this.iconIdElement = new HighlightedLabel(dom.append(dom.append(iconSelectBoxContainer, dom.$('.icon-select-id-container')), dom.$('.icon-select-id-label'))); - - const iconsDisposables = disposables.add(new MutableDisposable()); - iconsDisposables.value = this.renderIcons(this.options.icons, [], iconsContainer); - this.scrollableElement.scanDomNode(); - - disposables.add(this.inputBox.onDidChange(value => { - const icons = [], matches = []; - for (const icon of this.options.icons) { - const match = this.matchesContiguous(value, icon.id); - if (match) { - icons.push(icon); - matches.push(match); - } - } - iconsDisposables.value = this.renderIcons(icons, matches, iconsContainer); - this.scrollableElement?.scanDomNode(); - })); - - this.inputBox.inputElement.role = 'combobox'; - this.inputBox.inputElement.ariaHasPopup = 'menu'; - this.inputBox.inputElement.ariaAutoComplete = 'list'; - this.inputBox.inputElement.ariaExpanded = 'true'; - this.inputBox.inputElement.setAttribute('aria-controls', iconsContainer.id); - - return disposables; - } - - private renderIcons(icons: ThemeIcon[], matches: IMatch[][], container: HTMLElement): IDisposable { - const disposables = new DisposableStore(); - dom.clearNode(container); - const focusedIcon = this.renderedIcons[this.focusedItemIndex]?.icon; - let focusedIconIndex = 0; - const renderedIcons: IRenderedIconItem[] = []; - if (icons.length) { - for (let index = 0; index < icons.length; index++) { - const icon = icons[index]; - const iconContainer = dom.append(container, dom.$('.icon-container', { id: `${this.domId}_icons_${index}` })); - iconContainer.style.width = `${this.iconContainerWidth}px`; - iconContainer.style.height = `${this.iconContainerHeight}px`; - iconContainer.title = icon.id; - iconContainer.role = 'button'; - iconContainer.setAttribute('aria-setsize', `${icons.length}`); - iconContainer.setAttribute('aria-posinset', `${index + 1}`); - dom.append(iconContainer, dom.$(ThemeIcon.asCSSSelector(icon))); - renderedIcons.push({ icon, element: iconContainer, highlightMatches: matches[index] }); - - disposables.add(dom.addDisposableListener(iconContainer, dom.EventType.CLICK, (e: MouseEvent) => { - e.stopPropagation(); - this.setSelection(index); - })); - - disposables.add(dom.addDisposableListener(iconContainer, dom.EventType.MOUSE_OVER, (e: MouseEvent) => { - this.focusIcon(index); - })); - - if (icon === focusedIcon) { - focusedIconIndex = index; - } - } - } else { - const noResults = localize('iconSelect.noResults', "No results"); - dom.append(container, dom.$('.icon-no-results', undefined, noResults)); - alert(noResults); - } - - this.renderedIcons.splice(0, this.renderedIcons.length, ...renderedIcons); - this.focusIcon(focusedIconIndex); - - return disposables; - } - - private focusIcon(index: number): void { - const existing = this.renderedIcons[this.focusedItemIndex]; - if (existing) { - existing.element.classList.remove('focused'); - } - - this.focusedItemIndex = index; - const renderedItem = this.renderedIcons[index]; - - if (renderedItem) { - renderedItem.element.classList.add('focused'); - } - - if (this.inputBox) { - if (renderedItem) { - this.inputBox.inputElement.setAttribute('aria-activedescendant', renderedItem.element.id); - } else { - this.inputBox.inputElement.removeAttribute('aria-activedescendant'); - } - } - - if (this.iconIdElement) { - if (renderedItem) { - this.iconIdElement.set(renderedItem.icon.id, renderedItem.highlightMatches); - } else { - this.iconIdElement.set(''); - } - } - - this.reveal(index); - } - - private reveal(index: number): void { - if (!this.scrollableElement) { - return; - } - if (index < 0 || index >= this.renderedIcons.length) { - return; - } - const element = this.renderedIcons[index].element; - if (!element) { - return; - } - const { height } = this.scrollableElement.getScrollDimensions(); - const { scrollTop } = this.scrollableElement.getScrollPosition(); - if (element.offsetTop + this.iconContainerHeight > scrollTop + height) { - this.scrollableElement.setScrollPosition({ scrollTop: element.offsetTop + this.iconContainerHeight - height }); - } else if (element.offsetTop < scrollTop) { - this.scrollableElement.setScrollPosition({ scrollTop: element.offsetTop }); - } - } - - private matchesContiguous(word: string, wordToMatchAgainst: string): IMatch[] | null { - const matchIndex = wordToMatchAgainst.toLowerCase().indexOf(word.toLowerCase()); - if (matchIndex !== -1) { - return [{ start: matchIndex, end: matchIndex + word.length }]; - } - return null; - } - - layout(dimension: dom.Dimension): void { - this.domNode.style.width = `${dimension.width}px`; - this.domNode.style.height = `${dimension.height}px`; - - const iconsContainerWidth = dimension.width - 40; - this.numberOfElementsPerRow = Math.floor(iconsContainerWidth / this.iconContainerWidth); - if (this.numberOfElementsPerRow === 0) { - throw new Error('Insufficient width'); - } - - const extraSpace = iconsContainerWidth % this.iconContainerWidth; - const margin = Math.floor(extraSpace / this.numberOfElementsPerRow); - for (const { element } of this.renderedIcons) { - element.style.marginRight = `${margin}px`; - } - - if (this.scrollableElement) { - this.scrollableElement.getDomNode().style.height = `${dimension.height - 80}px`; - this.scrollableElement.scanDomNode(); - } - } - - getFocus(): number[] { - return [this.focusedItemIndex]; - } - - setSelection(index: number): void { - if (index < 0 || index >= this.renderedIcons.length) { - throw new Error(`Invalid index ${index}`); - } - this.focusIcon(index); - this._onDidSelect.fire(this.renderedIcons[index].icon); - } - - focus(): void { - this.inputBox?.focus(); - this.focusIcon(0); - } - - focusNext(): void { - this.focusIcon((this.focusedItemIndex + 1) % this.renderedIcons.length); - } - - focusPrevious(): void { - this.focusIcon((this.focusedItemIndex - 1 + this.renderedIcons.length) % this.renderedIcons.length); - } - - focusNextRow(): void { - let nextRowIndex = this.focusedItemIndex + this.numberOfElementsPerRow; - if (nextRowIndex >= this.renderedIcons.length) { - nextRowIndex = (nextRowIndex + 1) % this.numberOfElementsPerRow; - nextRowIndex = nextRowIndex >= this.renderedIcons.length ? 0 : nextRowIndex; - } - this.focusIcon(nextRowIndex); - } - - focusPreviousRow(): void { - let previousRowIndex = this.focusedItemIndex - this.numberOfElementsPerRow; - if (previousRowIndex < 0) { - const numberOfRows = Math.floor(this.renderedIcons.length / this.numberOfElementsPerRow); - previousRowIndex = this.focusedItemIndex + (this.numberOfElementsPerRow * numberOfRows) - 1; - previousRowIndex = previousRowIndex < 0 - ? this.renderedIcons.length - 1 - : previousRowIndex >= this.renderedIcons.length - ? previousRowIndex - this.numberOfElementsPerRow - : previousRowIndex; - } - this.focusIcon(previousRowIndex); - } - - getFocusedIcon(): ThemeIcon { - return this.renderedIcons[this.focusedItemIndex].icon; - } - -} diff --git a/src/vs/base/common/codicons.ts b/src/vs/base/common/codicons.ts index f45ae37d78faa2..0c5fd5a01e80be 100644 --- a/src/vs/base/common/codicons.ts +++ b/src/vs/base/common/codicons.ts @@ -324,7 +324,7 @@ export const Codicon = { note: register('note', 0xeb26), octoface: register('octoface', 0xeb27), openPreview: register('open-preview', 0xeb28), - package: register('package', 0xeb29), + package_: register('package', 0xeb29), paintcan: register('paintcan', 0xeb2a), pin: register('pin', 0xeb2b), play: register('play', 0xeb2c), diff --git a/src/vs/base/test/common/fuzzyScorer.test.ts b/src/vs/base/test/common/fuzzyScorer.test.ts index 86dfd0344183c1..03417dea59717e 100644 --- a/src/vs/base/test/common/fuzzyScorer.test.ts +++ b/src/vs/base/test/common/fuzzyScorer.test.ts @@ -102,7 +102,7 @@ const NullAccessor = new NullAccessorClass(); suite('Fuzzy Scorer', () => { test('score (fuzzy)', function () { - const target = 'HelLo-World'; + const target = 'HeLlo-World'; const scores: FuzzyScore[] = []; scores.push(_doScore(target, 'HelLo-World', true)); // direct case match @@ -134,7 +134,7 @@ suite('Fuzzy Scorer', () => { }); test('score (non fuzzy)', function () { - const target = 'HelLo-World'; + const target = 'HeLlo-World'; assert.ok(_doScore(target, 'HelLo-World', false)[0] > 0); assert.strictEqual(_doScore(target, 'HelLo-World', false)[1].length, 'HelLo-World'.length); @@ -1161,10 +1161,10 @@ suite('Fuzzy Scorer', () => { }); test('fuzzyScore2 (matching)', function () { - const target = 'HelLo-World'; + const target = 'HeLlo-World'; for (const offset of [0, 3]) { - let [score, matches] = _doScore2(offset === 0 ? target : `123${target}`, 'HelLo-World', offset); + let [score, matches] = _doScore2(offset === 0 ? target : `123${target}`, 'HeLlo-World', offset); assert.ok(score); assert.strictEqual(matches.length, 1); @@ -1183,7 +1183,7 @@ suite('Fuzzy Scorer', () => { }); test('fuzzyScore2 (multiple queries)', function () { - const target = 'HelLo-World'; + const target = 'HeLlo-World'; const [firstSingleScore, firstSingleMatches] = _doScore2(target, 'HelLo'); const [secondSingleScore, secondSingleMatches] = _doScore2(target, 'World'); diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts index 06ecbdd6396746..5307987e657d20 100644 --- a/src/vs/code/electron-main/app.ts +++ b/src/vs/code/electron-main/app.ts @@ -45,7 +45,7 @@ import { IExtensionUrlTrustService } from 'vs/platform/extensionManagement/commo import { ExtensionUrlTrustService } from 'vs/platform/extensionManagement/node/extensionUrlTrustService'; import { IExtensionHostStarter, ipcExtensionHostStarterChannelName } from 'vs/platform/extensions/common/extensionHostStarter'; import { ExtensionHostStarter } from 'vs/platform/extensions/electron-main/extensionHostStarter'; -import { IExternalTerminalMainService } from 'vs/platform/externalTerminal/electron-main/externalTerminal'; +import { IExternalTerminalMainService } from 'vs/platform/externalTerminal/common/externalTerminal'; import { LinuxExternalTerminalService, MacExternalTerminalService, WindowsExternalTerminalService } from 'vs/platform/externalTerminal/node/externalTerminalService'; import { LOCAL_FILE_SYSTEM_CHANNEL_NAME } from 'vs/platform/files/common/diskFileSystemProviderClient'; import { IFileService } from 'vs/platform/files/common/files'; diff --git a/src/vs/code/electron-sandbox/issue/issueReporterService.ts b/src/vs/code/electron-sandbox/issue/issueReporterService.ts index e095b3d6d03ddf..89fcc9d0e75721 100644 --- a/src/vs/code/electron-sandbox/issue/issueReporterService.ts +++ b/src/vs/code/electron-sandbox/issue/issueReporterService.ts @@ -1052,11 +1052,10 @@ export class IssueReporter extends Disposable { }, extension.name); }; - const extensionsSelector = this.getElementById('extension-selector'); + const extensionsSelector = this.getElementById('extension-selector'); if (extensionsSelector) { const { selectedExtension } = this.issueReporterModel.getData(); - reset(extensionsSelector, this.makeOption('', localize('selectExtension', "Select extension"), true), ...extensionOptions.map(extension => makeOption(extension, selectedExtension))); - extensionsSelector.selectedIndex = 0; + reset(extensionsSelector, $('option'), ...extensionOptions.map(extension => makeOption(extension, selectedExtension))); this.addEventListener('extension-selector', 'change', (e: Event) => { const selectedExtensionId = (e.target).value; diff --git a/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts b/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts index 822a6310bf0cd2..ca515f2cbbe2c0 100644 --- a/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts +++ b/src/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.ts @@ -96,7 +96,7 @@ export class LinesSliceCharSequence implements ISequence { let score = 0; if (prevCategory !== nextCategory) { score += 10; - if (prevCategory === CharBoundaryCategory.WordLower && nextCategory === CharBoundaryCategory.WordUpper) { + if (nextCategory === CharBoundaryCategory.WordUpper) { score += 1; } } diff --git a/src/vs/editor/contrib/linesOperations/browser/linesOperations.ts b/src/vs/editor/contrib/linesOperations/browser/linesOperations.ts index 74d7849587ef45..11a5c6c4f27280 100644 --- a/src/vs/editor/contrib/linesOperations/browser/linesOperations.ts +++ b/src/vs/editor/contrib/linesOperations/browser/linesOperations.ts @@ -708,7 +708,7 @@ export class DeleteAllLeftAction extends AbstractDeleteAllToBoundaryAction { if (selection.isEmpty()) { if (selection.startColumn === 1) { const deleteFromLine = Math.max(1, selection.startLineNumber - 1); - const deleteFromColumn = selection.startLineNumber === 1 ? 1 : model.getLineLength(deleteFromLine) + 1; + const deleteFromColumn = selection.startLineNumber === 1 ? 1 : model.getLineContent(deleteFromLine).length + 1; return new Range(deleteFromLine, deleteFromColumn, selection.startLineNumber, 1); } else { return new Range(selection.startLineNumber, 1, selection.startLineNumber, selection.startColumn); @@ -864,7 +864,7 @@ export class JoinLinesAction extends EditorAction { let endLineNumber: number, endColumn: number; - const selectionEndPositionOffset = model.getLineLength(selection.endLineNumber) - selection.endColumn; + const selectionEndPositionOffset = model.getLineContent(selection.endLineNumber).length - selection.endColumn; if (selection.isEmpty() || selection.startLineNumber === selection.endLineNumber) { const position = selection.getStartPosition(); diff --git a/src/vs/editor/test/node/diffing/fixtures.test.ts b/src/vs/editor/test/node/diffing/fixtures.test.ts index 18a949c6538f84..a7ff5dbe5a1133 100644 --- a/src/vs/editor/test/node/diffing/fixtures.test.ts +++ b/src/vs/editor/test/node/diffing/fixtures.test.ts @@ -11,7 +11,6 @@ import { FileAccess } from 'vs/base/common/network'; import { DetailedLineRangeMapping } from 'vs/editor/common/diff/rangeMapping'; import { LegacyLinesDiffComputer } from 'vs/editor/common/diff/legacyLinesDiffComputer'; import { DefaultLinesDiffComputer } from 'vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer'; -import { Range } from 'vs/editor/common/core/range'; suite('diffing fixtures', () => { setup(() => { @@ -49,18 +48,12 @@ suite('diffing fixtures', () => { originalRange: c.original.toString(), modifiedRange: c.modified.toString(), innerChanges: c.innerChanges?.map(c => ({ - originalRange: formatRange(c.originalRange, firstContentLines), - modifiedRange: formatRange(c.modifiedRange, secondContentLines), + originalRange: c.originalRange.toString(), + modifiedRange: c.modifiedRange.toString(), })) || null })); } - function formatRange(range: Range, lines: string[]): string { - const toLastChar = range.endColumn === lines[range.endLineNumber - 1].length + 1; - - return '[' + range.startLineNumber + ',' + range.startColumn + ' -> ' + range.endLineNumber + ',' + range.endColumn + (toLastChar ? ' EOL' : '') + ']'; - } - const actualDiffingResult: DiffingResult = { original: { content: firstContent, fileName: `./${firstFileName}` }, modified: { content: secondContent, fileName: `./${secondFileName}` }, diff --git a/src/vs/editor/test/node/diffing/fixtures/class-replacement/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/class-replacement/legacy.expected.diff.json index 8f07edb769ff6b..ec12e5d7a0211a 100644 --- a/src/vs/editor/test/node/diffing/fixtures/class-replacement/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/class-replacement/legacy.expected.diff.json @@ -13,8 +13,8 @@ "modifiedRange": "[29,31)", "innerChanges": [ { - "originalRange": "[29,1 -> 33,41 EOL]", - "modifiedRange": "[29,1 -> 30,54 EOL]" + "originalRange": "[29,1 -> 33,41]", + "modifiedRange": "[29,1 -> 30,54]" } ] }, @@ -59,8 +59,8 @@ "modifiedRange": "[36,42 -> 36,43]" }, { - "originalRange": "[41,29 -> 45,24 EOL]", - "modifiedRange": "[36,46 -> 36,66 EOL]" + "originalRange": "[41,29 -> 45,24]", + "modifiedRange": "[36,46 -> 36,66]" } ] }, diff --git a/src/vs/editor/test/node/diffing/fixtures/deletion/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/deletion/advanced.expected.diff.json index c1c5787e10f10a..77b3553a99c01f 100644 --- a/src/vs/editor/test/node/diffing/fixtures/deletion/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/deletion/advanced.expected.diff.json @@ -14,7 +14,7 @@ "innerChanges": [ { "originalRange": "[1,1 -> 29,64]", - "modifiedRange": "[1,1 -> 1,1 EOL]" + "modifiedRange": "[1,1 -> 1,1]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/difficult-move/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/difficult-move/advanced.expected.diff.json index 7686d146b161d7..b2155f7f62582e 100644 --- a/src/vs/editor/test/node/diffing/fixtures/difficult-move/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/difficult-move/advanced.expected.diff.json @@ -33,8 +33,8 @@ "modifiedRange": "[156,163)", "innerChanges": [ { - "originalRange": "[159,1 -> 159,1 EOL]", - "modifiedRange": "[156,1 -> 163,1 EOL]" + "originalRange": "[159,1 -> 159,1]", + "modifiedRange": "[156,1 -> 163,1]" } ] }, diff --git a/src/vs/editor/test/node/diffing/fixtures/difficult-move/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/difficult-move/legacy.expected.diff.json index 6b0e1568dc0c7a..54e5d6610b0e14 100644 --- a/src/vs/editor/test/node/diffing/fixtures/difficult-move/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/difficult-move/legacy.expected.diff.json @@ -28,8 +28,8 @@ "modifiedRange": "[226,234)", "innerChanges": [ { - "originalRange": "[222,17 -> 222,19 EOL]", - "modifiedRange": "[226,17 -> 226,17 EOL]" + "originalRange": "[222,17 -> 222,19]", + "modifiedRange": "[226,17 -> 226,17]" }, { "originalRange": "[223,4 -> 223,28]", @@ -40,8 +40,8 @@ "modifiedRange": "[227,41 -> 227,48]" }, { - "originalRange": "[223,54 -> 223,65 EOL]", - "modifiedRange": "[227,53 -> 227,62 EOL]" + "originalRange": "[223,54 -> 223,65]", + "modifiedRange": "[227,53 -> 227,62]" }, { "originalRange": "[224,4 -> 224,21]", @@ -60,8 +60,8 @@ "modifiedRange": "[228,123 -> 228,152]" }, { - "originalRange": "[226,22 -> 226,25 EOL]", - "modifiedRange": "[228,166 -> 228,169 EOL]" + "originalRange": "[226,22 -> 226,25]", + "modifiedRange": "[228,166 -> 228,169]" }, { "originalRange": "[227,5 -> 227,30]", @@ -72,16 +72,16 @@ "modifiedRange": "[229,28 -> 229,32]" }, { - "originalRange": "[227,45 -> 227,93 EOL]", - "modifiedRange": "[229,35 -> 229,67 EOL]" + "originalRange": "[227,45 -> 227,93]", + "modifiedRange": "[229,35 -> 229,67]" }, { - "originalRange": "[228,5 -> 228,51 EOL]", - "modifiedRange": "[230,5 -> 230,30 EOL]" + "originalRange": "[228,5 -> 228,51]", + "modifiedRange": "[230,5 -> 230,30]" }, { - "originalRange": "[229,6 -> 230,6 EOL]", - "modifiedRange": "[231,6 -> 231,40 EOL]" + "originalRange": "[229,6 -> 230,6]", + "modifiedRange": "[231,6 -> 231,40]" }, { "originalRange": "[231,4 -> 232,42]", @@ -92,8 +92,8 @@ "modifiedRange": "[232,25 -> 233,32]" }, { - "originalRange": "[232,72 -> 233,4 EOL]", - "modifiedRange": "[233,35 -> 233,60 EOL]" + "originalRange": "[232,72 -> 233,4]", + "modifiedRange": "[233,35 -> 233,60]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/advanced.expected.diff.json index 30bf62d99e9236..4059da96da8925 100644 --- a/src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/fuzzy-matching/advanced.expected.diff.json @@ -17,32 +17,32 @@ "modifiedRange": "[1,1 -> 1,1]" }, { - "originalRange": "[2,15 -> 2,15 EOL]", - "modifiedRange": "[1,15 -> 1,16 EOL]" + "originalRange": "[2,15 -> 2,15]", + "modifiedRange": "[1,15 -> 1,16]" }, { - "originalRange": "[3,15 -> 3,15 EOL]", - "modifiedRange": "[2,15 -> 2,16 EOL]" + "originalRange": "[3,15 -> 3,15]", + "modifiedRange": "[2,15 -> 2,16]" }, { - "originalRange": "[4,15 -> 4,15 EOL]", - "modifiedRange": "[3,15 -> 3,16 EOL]" + "originalRange": "[4,15 -> 4,15]", + "modifiedRange": "[3,15 -> 3,16]" }, { - "originalRange": "[5,15 -> 5,15 EOL]", - "modifiedRange": "[4,15 -> 5,1 EOL]" + "originalRange": "[5,15 -> 5,15]", + "modifiedRange": "[4,15 -> 5,1]" }, { - "originalRange": "[6,15 -> 6,15 EOL]", - "modifiedRange": "[6,15 -> 6,16 EOL]" + "originalRange": "[6,15 -> 6,15]", + "modifiedRange": "[6,15 -> 6,16]" }, { - "originalRange": "[7,15 -> 7,15 EOL]", - "modifiedRange": "[7,15 -> 7,16 EOL]" + "originalRange": "[7,15 -> 7,15]", + "modifiedRange": "[7,15 -> 7,16]" }, { - "originalRange": "[8,15 -> 8,15 EOL]", - "modifiedRange": "[8,15 -> 9,1 EOL]" + "originalRange": "[8,15 -> 8,15]", + "modifiedRange": "[8,15 -> 9,1]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/import-shifting/1.tst b/src/vs/editor/test/node/diffing/fixtures/import-shifting/1.tst deleted file mode 100644 index ff1f7ccada9c48..00000000000000 --- a/src/vs/editor/test/node/diffing/fixtures/import-shifting/1.tst +++ /dev/null @@ -1,3 +0,0 @@ -import { RuntimeMode } from './runtimeMode'; -import { PromiseQueue } from './telemetry'; -import { TestNotificationSender, TestUrlOpener } from './testHelpers'; diff --git a/src/vs/editor/test/node/diffing/fixtures/import-shifting/2.tst b/src/vs/editor/test/node/diffing/fixtures/import-shifting/2.tst deleted file mode 100644 index 3955d074aa9060..00000000000000 --- a/src/vs/editor/test/node/diffing/fixtures/import-shifting/2.tst +++ /dev/null @@ -1,3 +0,0 @@ -import { RuntimeMode } from './runtimeMode'; -import { PromiseQueue, TestPromiseQueue } from './telemetry'; -import { TestNotificationSender, TestUrlOpener } from './testHelpers'; diff --git a/src/vs/editor/test/node/diffing/fixtures/import-shifting/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/import-shifting/advanced.expected.diff.json deleted file mode 100644 index adbfd5208d5ee3..00000000000000 --- a/src/vs/editor/test/node/diffing/fixtures/import-shifting/advanced.expected.diff.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "original": { - "content": "import { RuntimeMode } from './runtimeMode';\nimport { PromiseQueue } from './telemetry';\nimport { TestNotificationSender, TestUrlOpener } from './testHelpers';\n", - "fileName": "./1.tst" - }, - "modified": { - "content": "import { RuntimeMode } from './runtimeMode';\nimport { PromiseQueue, TestPromiseQueue } from './telemetry';\nimport { TestNotificationSender, TestUrlOpener } from './testHelpers';\n", - "fileName": "./2.tst" - }, - "diffs": [ - { - "originalRange": "[2,3)", - "modifiedRange": "[2,3)", - "innerChanges": [ - { - "originalRange": "[2,22 -> 2,22]", - "modifiedRange": "[2,22 -> 2,40]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/import-shifting/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/import-shifting/legacy.expected.diff.json deleted file mode 100644 index adbfd5208d5ee3..00000000000000 --- a/src/vs/editor/test/node/diffing/fixtures/import-shifting/legacy.expected.diff.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "original": { - "content": "import { RuntimeMode } from './runtimeMode';\nimport { PromiseQueue } from './telemetry';\nimport { TestNotificationSender, TestUrlOpener } from './testHelpers';\n", - "fileName": "./1.tst" - }, - "modified": { - "content": "import { RuntimeMode } from './runtimeMode';\nimport { PromiseQueue, TestPromiseQueue } from './telemetry';\nimport { TestNotificationSender, TestUrlOpener } from './testHelpers';\n", - "fileName": "./2.tst" - }, - "diffs": [ - { - "originalRange": "[2,3)", - "modifiedRange": "[2,3)", - "innerChanges": [ - { - "originalRange": "[2,22 -> 2,22]", - "modifiedRange": "[2,22 -> 2,40]" - } - ] - } - ] -} \ No newline at end of file diff --git a/src/vs/editor/test/node/diffing/fixtures/intra-block-align/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/intra-block-align/advanced.expected.diff.json index 25b767b28eb315..84c7fde18814fa 100644 --- a/src/vs/editor/test/node/diffing/fixtures/intra-block-align/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/intra-block-align/advanced.expected.diff.json @@ -13,16 +13,16 @@ "modifiedRange": "[1,4)", "innerChanges": [ { - "originalRange": "[1,15 -> 1,16 EOL]", - "modifiedRange": "[1,15 -> 1,15 EOL]" + "originalRange": "[1,15 -> 1,16]", + "modifiedRange": "[1,15 -> 1,15]" }, { - "originalRange": "[2,15 -> 3,16 EOL]", - "modifiedRange": "[2,15 -> 2,15 EOL]" + "originalRange": "[2,15 -> 3,16]", + "modifiedRange": "[2,15 -> 2,15]" }, { - "originalRange": "[4,15 -> 4,16 EOL]", - "modifiedRange": "[3,15 -> 3,15 EOL]" + "originalRange": "[4,15 -> 4,16]", + "modifiedRange": "[3,15 -> 3,15]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/intra-block-align/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/intra-block-align/legacy.expected.diff.json index 25b767b28eb315..84c7fde18814fa 100644 --- a/src/vs/editor/test/node/diffing/fixtures/intra-block-align/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/intra-block-align/legacy.expected.diff.json @@ -13,16 +13,16 @@ "modifiedRange": "[1,4)", "innerChanges": [ { - "originalRange": "[1,15 -> 1,16 EOL]", - "modifiedRange": "[1,15 -> 1,15 EOL]" + "originalRange": "[1,15 -> 1,16]", + "modifiedRange": "[1,15 -> 1,15]" }, { - "originalRange": "[2,15 -> 3,16 EOL]", - "modifiedRange": "[2,15 -> 2,15 EOL]" + "originalRange": "[2,15 -> 3,16]", + "modifiedRange": "[2,15 -> 2,15]" }, { - "originalRange": "[4,15 -> 4,16 EOL]", - "modifiedRange": "[3,15 -> 3,15 EOL]" + "originalRange": "[4,15 -> 4,16]", + "modifiedRange": "[3,15 -> 3,15]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/invalid-diff-bug/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/invalid-diff-bug/advanced.expected.diff.json index 131a397b9a5ecf..8a805f72ae115f 100644 --- a/src/vs/editor/test/node/diffing/fixtures/invalid-diff-bug/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/invalid-diff-bug/advanced.expected.diff.json @@ -39,8 +39,8 @@ "modifiedRange": "[22,42 -> 22,47]" }, { - "originalRange": "[27,9 -> 33,1 EOL]", - "modifiedRange": "[22,47 -> 23,1 EOL]" + "originalRange": "[27,9 -> 33,1]", + "modifiedRange": "[22,47 -> 23,1]" } ] }, diff --git a/src/vs/editor/test/node/diffing/fixtures/invalid-diff-trimws/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/invalid-diff-trimws/advanced.expected.diff.json index bdaa293acd473e..6bfa1f36e92ea6 100644 --- a/src/vs/editor/test/node/diffing/fixtures/invalid-diff-trimws/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/invalid-diff-trimws/advanced.expected.diff.json @@ -33,8 +33,8 @@ "modifiedRange": "[745,4 -> 745,8]" }, { - "originalRange": "[744,59 -> 745,6 EOL]", - "modifiedRange": "[745,56 -> 745,59 EOL]" + "originalRange": "[744,59 -> 745,6]", + "modifiedRange": "[745,56 -> 745,59]" }, { "originalRange": "[746,24 -> 746,25]", diff --git a/src/vs/editor/test/node/diffing/fixtures/invalid-diff-trimws/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/invalid-diff-trimws/legacy.expected.diff.json index 924e83b900e265..e48b9d56df15d3 100644 --- a/src/vs/editor/test/node/diffing/fixtures/invalid-diff-trimws/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/invalid-diff-trimws/legacy.expected.diff.json @@ -33,16 +33,16 @@ "modifiedRange": "[745,4 -> 745,8]" }, { - "originalRange": "[744,59 -> 745,6 EOL]", - "modifiedRange": "[745,56 -> 745,59 EOL]" + "originalRange": "[744,59 -> 745,6]", + "modifiedRange": "[745,56 -> 745,59]" }, { "originalRange": "[746,24 -> 746,25]", "modifiedRange": "[746,26 -> 746,26]" }, { - "originalRange": "[746,37 -> 746,37 EOL]", - "modifiedRange": "[747,4 -> 750,20 EOL]" + "originalRange": "[746,37 -> 746,37]", + "modifiedRange": "[747,4 -> 750,20]" } ] }, diff --git a/src/vs/editor/test/node/diffing/fixtures/just-whitespace/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/just-whitespace/advanced.expected.diff.json index 1bff77e1739b20..a24c28bdcfafb3 100644 --- a/src/vs/editor/test/node/diffing/fixtures/just-whitespace/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/just-whitespace/advanced.expected.diff.json @@ -13,8 +13,8 @@ "modifiedRange": "[1,2)", "innerChanges": [ { - "originalRange": "[1,20 -> 1,21 EOL]", - "modifiedRange": "[1,20 -> 1,20 EOL]" + "originalRange": "[1,20 -> 1,21]", + "modifiedRange": "[1,20 -> 1,20]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/just-whitespace/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/just-whitespace/legacy.expected.diff.json index 1bff77e1739b20..a24c28bdcfafb3 100644 --- a/src/vs/editor/test/node/diffing/fixtures/just-whitespace/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/just-whitespace/legacy.expected.diff.json @@ -13,8 +13,8 @@ "modifiedRange": "[1,2)", "innerChanges": [ { - "originalRange": "[1,20 -> 1,21 EOL]", - "modifiedRange": "[1,20 -> 1,20 EOL]" + "originalRange": "[1,20 -> 1,21]", + "modifiedRange": "[1,20 -> 1,20]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/method-splitting/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/method-splitting/legacy.expected.diff.json index a5e2847e3b9e43..e1f4edb8a10422 100644 --- a/src/vs/editor/test/node/diffing/fixtures/method-splitting/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/method-splitting/legacy.expected.diff.json @@ -57,8 +57,8 @@ "modifiedRange": "[7,148 -> 7,170]" }, { - "originalRange": "[8,62 -> 9,3 EOL]", - "modifiedRange": "[7,181 -> 7,183 EOL]" + "originalRange": "[8,62 -> 9,3]", + "modifiedRange": "[7,181 -> 7,183]" } ] }, diff --git a/src/vs/editor/test/node/diffing/fixtures/move-1/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/move-1/advanced.expected.diff.json index ad809ac7fe027b..73f6bfc728f77c 100644 --- a/src/vs/editor/test/node/diffing/fixtures/move-1/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/move-1/advanced.expected.diff.json @@ -13,8 +13,8 @@ "modifiedRange": "[24,24)", "innerChanges": [ { - "originalRange": "[24,1 -> 28,1 EOL]", - "modifiedRange": "[24,1 -> 24,1 EOL]" + "originalRange": "[24,1 -> 28,1]", + "modifiedRange": "[24,1 -> 24,1]" } ] }, @@ -23,8 +23,8 @@ "modifiedRange": "[70,74)", "innerChanges": [ { - "originalRange": "[74,1 -> 74,1 EOL]", - "modifiedRange": "[70,1 -> 74,1 EOL]" + "originalRange": "[74,1 -> 74,1]", + "modifiedRange": "[70,1 -> 74,1]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/noise-1/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/noise-1/advanced.expected.diff.json index 36bbcbebac9393..20190a83798bf4 100644 --- a/src/vs/editor/test/node/diffing/fixtures/noise-1/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/noise-1/advanced.expected.diff.json @@ -21,8 +21,8 @@ "modifiedRange": "[53,6 -> 53,45]" }, { - "originalRange": "[52,77 -> 56,1 EOL]", - "modifiedRange": "[53,98 -> 66,1 EOL]" + "originalRange": "[52,77 -> 56,1]", + "modifiedRange": "[53,98 -> 66,1]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-2/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-2/legacy.expected.diff.json index b9a24abd3bd6e7..7d0d8ed1629c73 100644 --- a/src/vs/editor/test/node/diffing/fixtures/random-match-2/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-2/legacy.expected.diff.json @@ -37,8 +37,8 @@ "modifiedRange": "[3,78 -> 3,82]" }, { - "originalRange": "[5,123 -> 6,3 EOL]", - "modifiedRange": "[3,120 -> 3,120 EOL]" + "originalRange": "[5,123 -> 6,3]", + "modifiedRange": "[3,120 -> 3,120]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-3/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-3/advanced.expected.diff.json index f690b15dd1d53a..869c81350b7235 100644 --- a/src/vs/editor/test/node/diffing/fixtures/random-match-3/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-3/advanced.expected.diff.json @@ -17,8 +17,8 @@ "modifiedRange": "[1,6 -> 2,18]" }, { - "originalRange": "[2,1 -> 2,1 EOL]", - "modifiedRange": "[3,1 -> 4,1 EOL]" + "originalRange": "[2,1 -> 2,1]", + "modifiedRange": "[3,1 -> 4,1]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/random-match-3/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/random-match-3/legacy.expected.diff.json index 328fc5656a4f2e..a1f2e8db4a5dfd 100644 --- a/src/vs/editor/test/node/diffing/fixtures/random-match-3/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/random-match-3/legacy.expected.diff.json @@ -21,8 +21,8 @@ "modifiedRange": "[2,5 -> 2,18]" }, { - "originalRange": "[1,98 -> 1,98 EOL]", - "modifiedRange": "[2,71 -> 3,39 EOL]" + "originalRange": "[1,98 -> 1,98]", + "modifiedRange": "[2,71 -> 3,39]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/subword/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/subword/advanced.expected.diff.json index d22795d014f4fe..c8a5000a54ce4f 100644 --- a/src/vs/editor/test/node/diffing/fixtures/subword/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/subword/advanced.expected.diff.json @@ -23,8 +23,8 @@ "modifiedRange": "[6,7)", "innerChanges": [ { - "originalRange": "[5,92 -> 5,92 EOL]", - "modifiedRange": "[5,92 -> 6,31 EOL]" + "originalRange": "[5,92 -> 5,92]", + "modifiedRange": "[5,92 -> 6,31]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/trivial/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/trivial/advanced.expected.diff.json index a92226e91aaed6..b88bd08c02162d 100644 --- a/src/vs/editor/test/node/diffing/fixtures/trivial/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/trivial/advanced.expected.diff.json @@ -13,8 +13,8 @@ "modifiedRange": "[1,2)", "innerChanges": [ { - "originalRange": "[1,1 -> 1,1 EOL]", - "modifiedRange": "[1,1 -> 1,2 EOL]" + "originalRange": "[1,1 -> 1,1]", + "modifiedRange": "[1,1 -> 1,2]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/advanced.expected.diff.json index 59ce8640941177..a1f9f55cf07e30 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/advanced.expected.diff.json @@ -21,16 +21,16 @@ "modifiedRange": "[4,17 -> 4,28]" }, { - "originalRange": "[2,39 -> 2,40 EOL]", - "modifiedRange": "[4,50 -> 4,50 EOL]" + "originalRange": "[2,39 -> 2,40]", + "modifiedRange": "[4,50 -> 4,50]" }, { "originalRange": "[3,5 -> 3,9]", "modifiedRange": "[5,5 -> 5,5]" }, { - "originalRange": "[4,1 -> 5,1 EOL]", - "modifiedRange": "[6,1 -> 6,1 EOL]" + "originalRange": "[4,1 -> 5,1]", + "modifiedRange": "[6,1 -> 6,1]" } ] }, @@ -39,8 +39,8 @@ "modifiedRange": "[9,10)", "innerChanges": [ { - "originalRange": "[8,35 -> 8,35 EOL]", - "modifiedRange": "[9,35 -> 9,36 EOL]" + "originalRange": "[8,35 -> 8,35]", + "modifiedRange": "[9,35 -> 9,36]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/legacy.expected.diff.json index ee4907cc31f523..3411d7fbc1aa75 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-advanced-bug/legacy.expected.diff.json @@ -21,16 +21,16 @@ "modifiedRange": "[4,20 -> 4,31]" }, { - "originalRange": "[2,39 -> 2,40 EOL]", - "modifiedRange": "[4,50 -> 4,50 EOL]" + "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 EOL]", - "modifiedRange": "[5,53 -> 5,53 EOL]" + "originalRange": "[3,57 -> 4,36]", + "modifiedRange": "[5,53 -> 5,53]" } ] }, @@ -39,8 +39,8 @@ "modifiedRange": "[9,10)", "innerChanges": [ { - "originalRange": "[8,35 -> 8,35 EOL]", - "modifiedRange": "[9,35 -> 9,36 EOL]" + "originalRange": "[8,35 -> 8,35]", + "modifiedRange": "[9,35 -> 9,36]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-class/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-class/advanced.expected.diff.json index 7e9d27ae2e088c..0b00ea98beb982 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-class/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-class/advanced.expected.diff.json @@ -37,8 +37,8 @@ "modifiedRange": "[6,7)", "innerChanges": [ { - "originalRange": "[6,85 -> 9,1 EOL]", - "modifiedRange": "[6,85 -> 6,140 EOL]" + "originalRange": "[6,85 -> 9,1]", + "modifiedRange": "[6,85 -> 6,140]" } ] }, @@ -47,8 +47,8 @@ "modifiedRange": "[8,12)", "innerChanges": [ { - "originalRange": "[11,10 -> 21,1 EOL]", - "modifiedRange": "[8,10 -> 12,1 EOL]" + "originalRange": "[11,10 -> 21,1]", + "modifiedRange": "[8,10 -> 12,1]" } ] }, diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-class/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-class/legacy.expected.diff.json index ea38da72c7a3ab..bfb1d8aa5dc1d4 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-class/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-class/legacy.expected.diff.json @@ -36,8 +36,8 @@ "modifiedRange": "[6,85 -> 6,123]" }, { - "originalRange": "[8,57 -> 9,1 EOL]", - "modifiedRange": "[6,127 -> 6,140 EOL]" + "originalRange": "[8,57 -> 9,1]", + "modifiedRange": "[6,127 -> 6,140]" } ] }, diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/advanced.expected.diff.json index dea51256ca66a1..3835a5ceb3c7d7 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/advanced.expected.diff.json @@ -65,8 +65,8 @@ "modifiedRange": "[21,18 -> 21,43]" }, { - "originalRange": "[17,71 -> 24,1 EOL]", - "modifiedRange": "[21,74 -> 22,1 EOL]" + "originalRange": "[17,71 -> 24,1]", + "modifiedRange": "[21,74 -> 22,1]" } ] }, diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/legacy.expected.diff.json index be3f0413bf3aa1..f011be41a70afd 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-confusing-2/legacy.expected.diff.json @@ -71,8 +71,8 @@ "modifiedRange": "[16,40 -> 16,47]" }, { - "originalRange": "[14,196 -> 14,211 EOL]", - "modifiedRange": "[16,51 -> 17,1 EOL]" + "originalRange": "[14,196 -> 14,211]", + "modifiedRange": "[16,51 -> 17,1]" } ] }, @@ -101,8 +101,8 @@ "modifiedRange": "[21,39 -> 21,43]" }, { - "originalRange": "[17,71 -> 17,72 EOL]", - "modifiedRange": "[21,74 -> 22,1 EOL]" + "originalRange": "[17,71 -> 17,72]", + "modifiedRange": "[21,74 -> 22,1]" }, { "originalRange": "[18,3 -> 19,26]", @@ -152,8 +152,8 @@ "modifiedRange": "[34,12 -> 36,16]" }, { - "originalRange": "[30,30 -> 30,31 EOL]", - "modifiedRange": "[36,20 -> 37,9 EOL]" + "originalRange": "[30,30 -> 30,31]", + "modifiedRange": "[36,20 -> 37,9]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/advanced.expected.diff.json index e4262043f06c16..647fee613e5a0c 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-example2-ts/advanced.expected.diff.json @@ -31,8 +31,8 @@ "modifiedRange": "[19,26)", "innerChanges": [ { - "originalRange": "[8,2 -> 8,2 EOL]", - "modifiedRange": "[18,2 -> 25,2 EOL]" + "originalRange": "[8,2 -> 8,2]", + "modifiedRange": "[18,2 -> 25,2]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/advanced.expected.diff.json index 5000ede1044131..93657f7190997c 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/advanced.expected.diff.json @@ -27,8 +27,8 @@ "modifiedRange": "[7,1 -> 7,1]" }, { - "originalRange": "[7,9 -> 7,15 EOL]", - "modifiedRange": "[7,4 -> 7,4 EOL]" + "originalRange": "[7,9 -> 7,15]", + "modifiedRange": "[7,4 -> 7,4]" } ] }, diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/legacy.expected.diff.json index 1e160d871d402e..2c2c64d2b9c3f6 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-fragmented-eager-diffing3/legacy.expected.diff.json @@ -27,8 +27,8 @@ "modifiedRange": "[7,1 -> 7,1]" }, { - "originalRange": "[7,9 -> 7,15 EOL]", - "modifiedRange": "[7,4 -> 7,4 EOL]" + "originalRange": "[7,9 -> 7,15]", + "modifiedRange": "[7,4 -> 7,4]" } ] }, diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-methods/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-methods/legacy.expected.diff.json index 4f1a7a5647da5a..5034a4b336ac9b 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-methods/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-methods/legacy.expected.diff.json @@ -21,8 +21,8 @@ "modifiedRange": "[3,12 -> 3,20]" }, { - "originalRange": "[3,91 -> 3,91 EOL]", - "modifiedRange": "[3,102 -> 4,73 EOL]" + "originalRange": "[3,91 -> 3,91]", + "modifiedRange": "[3,102 -> 4,73]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/legacy.expected.diff.json index 3f20554ee6e800..aa65f823a85992 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ts-too-much-minimization/legacy.expected.diff.json @@ -13,8 +13,8 @@ "modifiedRange": "[9,15)", "innerChanges": [ { - "originalRange": "[9,124 -> 9,124 EOL]", - "modifiedRange": "[9,124 -> 14,143 EOL]" + "originalRange": "[9,124 -> 9,124]", + "modifiedRange": "[9,124 -> 14,143]" } ] } diff --git a/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/advanced.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/advanced.expected.diff.json index 23feeaa21195c9..5742291665d454 100644 --- a/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/advanced.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/advanced.expected.diff.json @@ -83,8 +83,8 @@ "modifiedRange": "[43,44)", "innerChanges": [ { - "originalRange": "[43,5 -> 43,16 EOL]", - "modifiedRange": "[43,5 -> 43,11 EOL]" + "originalRange": "[43,5 -> 43,16]", + "modifiedRange": "[43,5 -> 43,11]" } ] }, diff --git a/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/legacy.expected.diff.json index 5cf3d49bc8f70e..8f9a20db404c36 100644 --- a/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/word-shared-letters/legacy.expected.diff.json @@ -95,8 +95,8 @@ "modifiedRange": "[43,8 -> 43,8]" }, { - "originalRange": "[43,14 -> 43,16 EOL]", - "modifiedRange": "[43,11 -> 43,11 EOL]" + "originalRange": "[43,14 -> 43,16]", + "modifiedRange": "[43,11 -> 43,11]" } ] }, diff --git a/src/vs/editor/test/node/diffing/fixtures/ws-alignment/legacy.expected.diff.json b/src/vs/editor/test/node/diffing/fixtures/ws-alignment/legacy.expected.diff.json index 0fff59a02147d5..c248859e098696 100644 --- a/src/vs/editor/test/node/diffing/fixtures/ws-alignment/legacy.expected.diff.json +++ b/src/vs/editor/test/node/diffing/fixtures/ws-alignment/legacy.expected.diff.json @@ -27,28 +27,28 @@ "modifiedRange": "[7,5 -> 8,5]" }, { - "originalRange": "[7,14 -> 7,43 EOL]", - "modifiedRange": "[8,8 -> 11,140 EOL]" + "originalRange": "[7,14 -> 7,43]", + "modifiedRange": "[8,8 -> 11,140]" }, { "originalRange": "[8,5 -> 8,6]", "modifiedRange": "[12,5 -> 12,25]" }, { - "originalRange": "[8,9 -> 9,12 EOL]", - "modifiedRange": "[12,28 -> 12,131 EOL]" + "originalRange": "[8,9 -> 9,12]", + "modifiedRange": "[12,28 -> 12,131]" }, { "originalRange": "[10,7 -> 10,22]", "modifiedRange": "[13,7 -> 13,17]" }, { - "originalRange": "[10,30 -> 10,48 EOL]", - "modifiedRange": "[13,25 -> 14,8 EOL]" + "originalRange": "[10,30 -> 10,48]", + "modifiedRange": "[13,25 -> 14,8]" }, { - "originalRange": "[11,6 -> 11,13 EOL]", - "modifiedRange": "[15,6 -> 15,7 EOL]" + "originalRange": "[11,6 -> 11,13]", + "modifiedRange": "[15,6 -> 15,7]" }, { "originalRange": "[12,5 -> 12,17]", diff --git a/src/vs/platform/externalTerminal/common/externalTerminal.ts b/src/vs/platform/externalTerminal/common/externalTerminal.ts index 6d8da336419102..290bb20fca3b08 100644 --- a/src/vs/platform/externalTerminal/common/externalTerminal.ts +++ b/src/vs/platform/externalTerminal/common/externalTerminal.ts @@ -35,3 +35,9 @@ export interface IExternalTerminalConfiguration { } export const DEFAULT_TERMINAL_OSX = 'Terminal.app'; + +export const IExternalTerminalMainService = createDecorator('externalTerminal'); + +export interface IExternalTerminalMainService extends IExternalTerminalService { + readonly _serviceBrand: undefined; +} diff --git a/src/vs/platform/externalTerminal/electron-main/externalTerminal.ts b/src/vs/platform/externalTerminal/electron-sandbox/externalTerminalMainService.ts similarity index 81% rename from src/vs/platform/externalTerminal/electron-main/externalTerminal.ts rename to src/vs/platform/externalTerminal/electron-sandbox/externalTerminalMainService.ts index af6925563c7b11..4f2ec5e3941402 100644 --- a/src/vs/platform/externalTerminal/electron-main/externalTerminal.ts +++ b/src/vs/platform/externalTerminal/electron-sandbox/externalTerminalMainService.ts @@ -5,9 +5,12 @@ import { IExternalTerminalService } from 'vs/platform/externalTerminal/common/externalTerminal'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; +import { registerMainProcessRemoteService } from 'vs/platform/ipc/electron-sandbox/services'; export const IExternalTerminalMainService = createDecorator('externalTerminal'); export interface IExternalTerminalMainService extends IExternalTerminalService { readonly _serviceBrand: undefined; } + +registerMainProcessRemoteService(IExternalTerminalMainService, 'externalTerminal'); diff --git a/src/vs/platform/externalTerminal/electron-sandbox/externalTerminalService.ts b/src/vs/platform/externalTerminal/electron-sandbox/externalTerminalService.ts deleted file mode 100644 index 209c24d072b527..00000000000000 --- a/src/vs/platform/externalTerminal/electron-sandbox/externalTerminalService.ts +++ /dev/null @@ -1,16 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { IExternalTerminalService as ICommonExternalTerminalService } from 'vs/platform/externalTerminal/common/externalTerminal'; -import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { registerMainProcessRemoteService } from 'vs/platform/ipc/electron-sandbox/services'; - -export const IExternalTerminalService = createDecorator('externalTerminal'); - -export interface IExternalTerminalService extends ICommonExternalTerminalService { - readonly _serviceBrand: undefined; -} - -registerMainProcessRemoteService(IExternalTerminalService, 'externalTerminal'); diff --git a/src/vs/platform/externalTerminal/node/externalTerminalService.ts b/src/vs/platform/externalTerminal/node/externalTerminalService.ts index 3dcc1c49d0abcf..9b0b2ba548c31e 100644 --- a/src/vs/platform/externalTerminal/node/externalTerminalService.ts +++ b/src/vs/platform/externalTerminal/node/externalTerminalService.ts @@ -11,7 +11,7 @@ import { sanitizeProcessEnvironment } from 'vs/base/common/processes'; import * as pfs from 'vs/base/node/pfs'; import * as processes from 'vs/base/node/processes'; import * as nls from 'vs/nls'; -import { DEFAULT_TERMINAL_OSX, IExternalTerminalService, IExternalTerminalSettings, ITerminalForPlatform } from 'vs/platform/externalTerminal/common/externalTerminal'; +import { DEFAULT_TERMINAL_OSX, IExternalTerminalMainService, IExternalTerminalSettings, ITerminalForPlatform } from 'vs/platform/externalTerminal/common/externalTerminal'; import { ITerminalEnvironment } from 'vs/platform/terminal/common/terminal'; const TERMINAL_TITLE = nls.localize('console.title', "VS Code Console"); @@ -28,7 +28,7 @@ abstract class ExternalTerminalService { } } -export class WindowsExternalTerminalService extends ExternalTerminalService implements IExternalTerminalService { +export class WindowsExternalTerminalService extends ExternalTerminalService implements IExternalTerminalMainService { private static readonly CMD = 'cmd.exe'; private static _DEFAULT_TERMINAL_WINDOWS: string; @@ -125,7 +125,7 @@ export class WindowsExternalTerminalService extends ExternalTerminalService impl } } -export class MacExternalTerminalService extends ExternalTerminalService implements IExternalTerminalService { +export class MacExternalTerminalService extends ExternalTerminalService implements IExternalTerminalMainService { private static readonly OSASCRIPT = '/usr/bin/osascript'; // osascript is the AppleScript interpreter on OS X public openTerminal(configuration: IExternalTerminalSettings, cwd?: string): Promise { @@ -215,7 +215,7 @@ export class MacExternalTerminalService extends ExternalTerminalService implemen } } -export class LinuxExternalTerminalService extends ExternalTerminalService implements IExternalTerminalService { +export class LinuxExternalTerminalService extends ExternalTerminalService implements IExternalTerminalMainService { private static readonly WAIT_MESSAGE = nls.localize('press.any.key', "Press any key to continue..."); diff --git a/src/vs/platform/files/common/fileService.ts b/src/vs/platform/files/common/fileService.ts index 8a8d6a57bda181..b65c4e8705a01b 100644 --- a/src/vs/platform/files/common/fileService.ts +++ b/src/vs/platform/files/common/fileService.ts @@ -18,7 +18,7 @@ import { basename, dirname, extUri, extUriIgnorePathCase, IExtUri, isAbsolutePat import { consumeStream, isReadableBufferedStream, isReadableStream, listenStream, newWriteableStream, peekReadable, peekStream, transform } from 'vs/base/common/stream'; import { URI } from 'vs/base/common/uri'; import { localize } from 'vs/nls'; -import { ensureFileSystemProviderError, etag, ETAG_DISABLED, FileChangesEvent, IFileDeleteOptions, FileOperation, FileOperationError, FileOperationEvent, FileOperationResult, FilePermission, FileSystemProviderCapabilities, FileSystemProviderErrorCode, FileType, hasFileAtomicReadCapability, hasFileFolderCopyCapability, hasFileReadStreamCapability, hasOpenReadWriteCloseCapability, hasReadWriteCapability, ICreateFileOptions, IFileContent, IFileService, IFileStat, IFileStatWithMetadata, IFileStreamContent, IFileSystemProvider, IFileSystemProviderActivationEvent, IFileSystemProviderCapabilitiesChangeEvent, IFileSystemProviderRegistrationEvent, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, IReadFileOptions, IReadFileStreamOptions, IResolveFileOptions, IFileStatResult, IFileStatResultWithMetadata, IResolveMetadataFileOptions, IStat, IFileStatWithPartialMetadata, IWatchOptions, IWriteFileOptions, NotModifiedSinceFileOperationError, toFileOperationResult, toFileSystemProviderErrorCode, hasFileCloneCapability, TooLargeFileOperationError, hasFileAtomicDeleteCapability, hasFileAtomicWriteCapability } from 'vs/platform/files/common/files'; +import { ensureFileSystemProviderError, etag, ETAG_DISABLED, FileChangesEvent, IFileDeleteOptions, FileOperation, FileOperationError, FileOperationEvent, FileOperationResult, FilePermission, FileSystemProviderCapabilities, FileSystemProviderErrorCode, FileType, hasFileAtomicReadCapability, hasFileFolderCopyCapability, hasFileReadStreamCapability, hasOpenReadWriteCloseCapability, hasReadWriteCapability, ICreateFileOptions, IFileContent, IFileService, IFileStat, IFileStatWithMetadata, IFileStreamContent, IFileSystemProvider, IFileSystemProviderActivationEvent, IFileSystemProviderCapabilitiesChangeEvent, IFileSystemProviderRegistrationEvent, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileReadStreamCapability, IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, IReadFileOptions, IReadFileStreamOptions, IResolveFileOptions, IFileStatResult, IFileStatResultWithMetadata, IResolveMetadataFileOptions, IStat, IFileStatWithPartialMetadata, IWatchOptions, IWriteFileOptions, NotModifiedSinceFileOperationError, toFileOperationResult, toFileSystemProviderErrorCode, hasFileCloneCapability, TooLargeFileOperationError } from 'vs/platform/files/common/files'; import { readFileIntoStream } from 'vs/platform/files/common/io'; import { ILogService } from 'vs/platform/log/common/log'; import { ErrorNoTelemetry } from 'vs/base/common/errors'; @@ -359,18 +359,10 @@ export class FileService extends Disposable implements IFileService { const provider = this.throwIfFileSystemIsReadonly(await this.withWriteProvider(resource), resource); const { providerExtUri } = this.getExtUri(provider); - let writeFileOptions = options; - if (hasFileAtomicWriteCapability(provider) && !writeFileOptions?.atomic) { - const enforcedAtomicWrite = provider.enforceAtomicWriteFile?.(resource); - if (enforcedAtomicWrite) { - writeFileOptions = { ...options, atomic: enforcedAtomicWrite }; - } - } - try { // validate write - const stat = await this.validateWriteFile(provider, resource, writeFileOptions); + const stat = await this.validateWriteFile(provider, resource, options); // mkdir recursively as needed if (!stat) { @@ -397,13 +389,9 @@ export class FileService extends Disposable implements IFileService { bufferOrReadableOrStreamOrBufferedStream = bufferOrReadableOrStream; } - // write file: unbuffered - if ( - !hasOpenReadWriteCloseCapability(provider) || // buffered writing is unsupported - (hasReadWriteCapability(provider) && bufferOrReadableOrStreamOrBufferedStream instanceof VSBuffer) || // data is a full buffer already - (hasReadWriteCapability(provider) && hasFileAtomicWriteCapability(provider) && writeFileOptions?.atomic) // atomic write forces unbuffered write if the provider supports it - ) { - await this.doWriteUnbuffered(provider, resource, writeFileOptions, bufferOrReadableOrStreamOrBufferedStream); + // write file: unbuffered (only if data to write is a buffer, or the provider has no buffered write capability) + if (!hasOpenReadWriteCloseCapability(provider) || (hasReadWriteCapability(provider) && bufferOrReadableOrStreamOrBufferedStream instanceof VSBuffer)) { + await this.doWriteUnbuffered(provider, resource, options, bufferOrReadableOrStreamOrBufferedStream); } // write file: buffered @@ -411,20 +399,20 @@ export class FileService extends Disposable implements IFileService { const contents = bufferOrReadableOrStreamOrBufferedStream instanceof VSBuffer ? bufferToReadable(bufferOrReadableOrStreamOrBufferedStream) : bufferOrReadableOrStreamOrBufferedStream; // atomic write - if (writeFileOptions?.atomic !== false && writeFileOptions?.atomic?.postfix) { - await this.doWriteBufferedAtomic(provider, resource, joinPath(dirname(resource), `${basename(resource)}${writeFileOptions.atomic.postfix}`), writeFileOptions, contents); + if (options?.atomic !== false && options?.atomic?.postfix) { + await this.doWriteBufferedAtomic(provider, resource, joinPath(dirname(resource), `${basename(resource)}${options.atomic.postfix}`), options, contents); } // non-atomic write else { - await this.doWriteBuffered(provider, resource, writeFileOptions, contents); + await this.doWriteBuffered(provider, resource, options, contents); } } // events this._onDidRunOperation.fire(new FileOperationEvent(resource, FileOperation.WRITE)); } catch (error) { - throw new FileOperationError(localize('err.write', "Unable to write file '{0}' ({1})", this.resourceForError(resource), ensureFileSystemProviderError(error).toString()), toFileOperationResult(error), writeFileOptions); + throw new FileOperationError(localize('err.write', "Unable to write file '{0}' ({1})", this.resourceForError(resource), ensureFileSystemProviderError(error).toString()), toFileOperationResult(error), options); } return this.resolve(resource, { resolveMetadata: true }); @@ -547,13 +535,8 @@ export class FileService extends Disposable implements IFileService { // cancellation of the read operation. const cancellableSource = new CancellationTokenSource(token); - let readFileOptions = options; - if (hasFileAtomicReadCapability(provider) && provider.enforceAtomicReadFile?.(resource)) { - readFileOptions = { ...options, atomic: true }; - } - // validate read operation - const statPromise = this.validateReadFile(resource, readFileOptions).then(stat => stat, error => { + const statPromise = this.validateReadFile(resource, options).then(stat => stat, error => { cancellableSource.dispose(true); throw error; @@ -566,27 +549,27 @@ export class FileService extends Disposable implements IFileService { // due to the likelihood of hitting a NOT_MODIFIED_SINCE result. // otherwise, we let it run in parallel to the file reading for // optimal startup performance. - if (typeof readFileOptions?.etag === 'string' && readFileOptions.etag !== ETAG_DISABLED) { + if (typeof options?.etag === 'string' && options.etag !== ETAG_DISABLED) { await statPromise; } // read unbuffered if ( - (readFileOptions?.atomic && hasFileAtomicReadCapability(provider)) || // atomic reads are always unbuffered + (options?.atomic && hasFileAtomicReadCapability(provider)) || // atomic reads are always unbuffered !(hasOpenReadWriteCloseCapability(provider) || hasFileReadStreamCapability(provider)) || // provider has no buffered capability - (hasReadWriteCapability(provider) && readFileOptions?.preferUnbuffered) // unbuffered read is preferred + (hasReadWriteCapability(provider) && options?.preferUnbuffered) // unbuffered read is preferred ) { - fileStream = this.readFileUnbuffered(provider, resource, readFileOptions); + fileStream = this.readFileUnbuffered(provider, resource, options); } // read streamed (always prefer over primitive buffered read) else if (hasFileReadStreamCapability(provider)) { - fileStream = this.readFileStreamed(provider, resource, cancellableSource.token, readFileOptions); + fileStream = this.readFileStreamed(provider, resource, cancellableSource.token, options); } // read buffered else { - fileStream = this.readFileBuffered(provider, resource, cancellableSource.token, readFileOptions); + fileStream = this.readFileBuffered(provider, resource, cancellableSource.token, options); } fileStream.on('end', () => cancellableSource.dispose()); @@ -609,7 +592,7 @@ export class FileService extends Disposable implements IFileService { // Re-throw errors as file operation errors but preserve // specific errors (such as not modified since) - throw this.restoreReadError(error, resource, readFileOptions); + throw this.restoreReadError(error, resource, options); } } @@ -1040,17 +1023,9 @@ export class FileService extends Disposable implements IFileService { async del(resource: URI, options?: Partial): Promise { const provider = await this.doValidateDelete(resource, options); - let deleteFileOptions = options; - if (hasFileAtomicDeleteCapability(provider) && !deleteFileOptions?.atomic) { - const enforcedAtomicDelete = provider.enforceAtomicDelete?.(resource); - if (enforcedAtomicDelete) { - deleteFileOptions = { ...options, atomic: enforcedAtomicDelete }; - } - } - - const useTrash = !!deleteFileOptions?.useTrash; - const recursive = !!deleteFileOptions?.recursive; - const atomic = deleteFileOptions?.atomic ?? false; + const useTrash = !!options?.useTrash; + const recursive = !!options?.recursive; + const atomic = options?.atomic ?? false; // Delete through provider await provider.delete(resource, { recursive, useTrash, atomic }); diff --git a/src/vs/platform/files/common/files.ts b/src/vs/platform/files/common/files.ts index 0913cb6eaa85b7..4f7c149b6d6d94 100644 --- a/src/vs/platform/files/common/files.ts +++ b/src/vs/platform/files/common/files.ts @@ -657,7 +657,6 @@ export function hasFileReadStreamCapability(provider: IFileSystemProvider): prov export interface IFileSystemProviderWithFileAtomicReadCapability extends IFileSystemProvider { readFile(resource: URI, opts?: IFileAtomicReadOptions): Promise; - enforceAtomicReadFile?(resource: URI): boolean; } export function hasFileAtomicReadCapability(provider: IFileSystemProvider): provider is IFileSystemProviderWithFileAtomicReadCapability { @@ -670,7 +669,6 @@ export function hasFileAtomicReadCapability(provider: IFileSystemProvider): prov export interface IFileSystemProviderWithFileAtomicWriteCapability extends IFileSystemProvider { writeFile(resource: URI, contents: Uint8Array, opts?: IFileAtomicWriteOptions): Promise; - enforceAtomicWriteFile?(resource: URI): IFileAtomicOptions | false; } export function hasFileAtomicWriteCapability(provider: IFileSystemProvider): provider is IFileSystemProviderWithFileAtomicWriteCapability { @@ -683,7 +681,6 @@ export function hasFileAtomicWriteCapability(provider: IFileSystemProvider): pro export interface IFileSystemProviderWithFileAtomicDeleteCapability extends IFileSystemProvider { delete(resource: URI, opts: IFileAtomicDeleteOptions): Promise; - enforceAtomicDelete?(resource: URI): IFileAtomicOptions | false; } export function hasFileAtomicDeleteCapability(provider: IFileSystemProvider): provider is IFileSystemProviderWithFileAtomicDeleteCapability { diff --git a/src/vs/platform/files/common/inMemoryFilesystemProvider.ts b/src/vs/platform/files/common/inMemoryFilesystemProvider.ts index f875c3be628e19..9402533647eba8 100644 --- a/src/vs/platform/files/common/inMemoryFilesystemProvider.ts +++ b/src/vs/platform/files/common/inMemoryFilesystemProvider.ts @@ -3,18 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { VSBuffer } from 'vs/base/common/buffer'; import { Emitter, Event } from 'vs/base/common/event'; import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; import * as resources from 'vs/base/common/resources'; -import { ReadableStreamEvents, newWriteableStream } from 'vs/base/common/stream'; import { URI } from 'vs/base/common/uri'; -import { FileChangeType, IFileDeleteOptions, IFileOverwriteOptions, FileSystemProviderCapabilities, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileChange, IFileSystemProviderWithFileReadWriteCapability, IStat, IWatchOptions, createFileSystemProviderError, IFileSystemProviderWithOpenReadWriteCloseCapability, IFileOpenOptions, IFileSystemProviderWithFileAtomicDeleteCapability, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileAtomicWriteCapability, IFileSystemProviderWithFileReadStreamCapability } from 'vs/platform/files/common/files'; +import { FileChangeType, IFileDeleteOptions, IFileOverwriteOptions, FileSystemProviderCapabilities, FileSystemProviderErrorCode, FileType, IFileWriteOptions, IFileChange, IFileSystemProviderWithFileReadWriteCapability, IStat, IWatchOptions, createFileSystemProviderError } from 'vs/platform/files/common/files'; class File implements IStat { - readonly type: FileType.File; - readonly ctime: number; + type: FileType.File; + ctime: number; mtime: number; size: number; @@ -32,13 +30,13 @@ class File implements IStat { class Directory implements IStat { - readonly type: FileType.Directory; - readonly ctime: number; + type: FileType.Directory; + ctime: number; mtime: number; size: number; name: string; - readonly entries: Map; + entries: Map; constructor(name: string) { this.type = FileType.Directory; @@ -52,16 +50,8 @@ class Directory implements IStat { type Entry = File | Directory; -export class InMemoryFileSystemProvider extends Disposable implements - IFileSystemProviderWithFileReadWriteCapability, - IFileSystemProviderWithOpenReadWriteCloseCapability, - IFileSystemProviderWithFileReadStreamCapability, - IFileSystemProviderWithFileAtomicReadCapability, - IFileSystemProviderWithFileAtomicWriteCapability, - IFileSystemProviderWithFileAtomicDeleteCapability { +export class InMemoryFileSystemProvider extends Disposable implements IFileSystemProviderWithFileReadWriteCapability { - private memoryFdCounter = 0; - private readonly fdMemory = new Map(); private _onDidChangeCapabilities = this._register(new Emitter()); readonly onDidChangeCapabilities = this._onDidChangeCapabilities.event; @@ -102,15 +92,6 @@ export class InMemoryFileSystemProvider extends Disposable implements throw createFileSystemProviderError('file not found', FileSystemProviderErrorCode.FileNotFound); } - readFileStream(resource: URI): ReadableStreamEvents { - const data = this._lookupAsFile(resource, false).data; - - const stream = newWriteableStream(data => VSBuffer.concat(data.map(data => VSBuffer.wrap(data))).buffer); - stream.end(data); - - return stream; - } - async writeFile(resource: URI, content: Uint8Array, opts: IFileWriteOptions): Promise { const basename = resources.basename(resource); const parent = this._lookupParentDirectory(resource); @@ -136,44 +117,6 @@ export class InMemoryFileSystemProvider extends Disposable implements this._fireSoon({ type: FileChangeType.UPDATED, resource }); } - // file open/read/write/close - open(resource: URI, opts: IFileOpenOptions): Promise { - const data = this._lookupAsFile(resource, false).data; - if (data) { - const fd = this.memoryFdCounter++; - this.fdMemory.set(fd, data); - return Promise.resolve(fd); - } - throw createFileSystemProviderError('file not found', FileSystemProviderErrorCode.FileNotFound); - } - - close(fd: number): Promise { - this.fdMemory.delete(fd); - return Promise.resolve(); - } - - read(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { - const memory = this.fdMemory.get(fd); - if (!memory) { - throw createFileSystemProviderError(`No file with that descriptor open`, FileSystemProviderErrorCode.Unavailable); - } - - const toWrite = VSBuffer.wrap(memory).slice(pos, pos + length); - data.set(toWrite.buffer, offset); - return Promise.resolve(toWrite.byteLength); - } - - write(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { - const memory = this.fdMemory.get(fd); - if (!memory) { - throw createFileSystemProviderError(`No file with that descriptor open`, FileSystemProviderErrorCode.Unavailable); - } - - const toWrite = VSBuffer.wrap(data).slice(offset, offset + length); - memory.set(toWrite.buffer, pos); - return Promise.resolve(toWrite.byteLength); - } - // --- manage files/folders async rename(from: URI, to: URI, opts: IFileOverwriteOptions): Promise { @@ -298,10 +241,4 @@ export class InMemoryFileSystemProvider extends Disposable implements this._bufferedChanges.length = 0; }, 5); } - - override dispose(): void { - super.dispose(); - - this.fdMemory.clear(); - } } diff --git a/src/vs/platform/files/test/browser/fileService.test.ts b/src/vs/platform/files/test/browser/fileService.test.ts index 5d0b16250edef9..5b32db14d6414e 100644 --- a/src/vs/platform/files/test/browser/fileService.test.ts +++ b/src/vs/platform/files/test/browser/fileService.test.ts @@ -5,14 +5,12 @@ import * as assert from 'assert'; import { DeferredPromise, timeout } from 'vs/base/common/async'; -import { bufferToReadable, bufferToStream, VSBuffer } from 'vs/base/common/buffer'; import { CancellationToken, CancellationTokenSource } from 'vs/base/common/cancellation'; import { DisposableStore, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { isEqual } from 'vs/base/common/resources'; import { consumeStream, newWriteableStream, ReadableStreamEvents } from 'vs/base/common/stream'; import { URI } from 'vs/base/common/uri'; import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { IFileOpenOptions, IFileReadStreamOptions, FileSystemProviderCapabilities, FileType, IFileSystemProviderCapabilitiesChangeEvent, IFileSystemProviderRegistrationEvent, IStat, IFileAtomicReadOptions, IFileAtomicWriteOptions, IFileAtomicDeleteOptions, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileAtomicDeleteCapability, IFileSystemProviderWithFileAtomicWriteCapability, IFileAtomicOptions } from 'vs/platform/files/common/files'; +import { IFileOpenOptions, IFileReadStreamOptions, FileSystemProviderCapabilities, FileType, IFileSystemProviderCapabilitiesChangeEvent, IFileSystemProviderRegistrationEvent, IStat } from 'vs/platform/files/common/files'; import { FileService } from 'vs/platform/files/common/fileService'; import { NullFileSystemProvider } from 'vs/platform/files/test/common/nullFileSystemProvider'; import { NullLogService } from 'vs/platform/log/common/log'; @@ -179,7 +177,7 @@ suite('File Service', () => { throw new Error('failed'); } - override readFileStream(resource: URI, opts: IFileReadStreamOptions, token: CancellationToken): ReadableStreamEvents { + readFileStream(resource: URI, opts: IFileReadStreamOptions, token: CancellationToken): ReadableStreamEvents { if (async) { const stream = newWriteableStream(chunk => chunk[0]); timeout(5, CancellationToken.None).then(() => stream.error(new Error('failed'))); @@ -234,7 +232,7 @@ suite('File Service', () => { }; } - override readFileStream(resource: URI, opts: IFileReadStreamOptions, token: CancellationToken): ReadableStreamEvents { + readFileStream(resource: URI, opts: IFileReadStreamOptions, token: CancellationToken): ReadableStreamEvents { const stream = newWriteableStream(chunk => chunk[0]); disposables.add(token.onCancellationRequested(() => { stream.error(new Error('Expected cancellation')); @@ -247,7 +245,7 @@ suite('File Service', () => { } }; - disposables.add(service.registerProvider('test', provider)); + const disposable = service.registerProvider('test', provider); provider.setCapabilities(FileSystemProviderCapabilities.FileReadStream); @@ -274,96 +272,8 @@ suite('File Service', () => { } assert.ok(e2); - }); - - test('enforced atomic read/write/delete', async () => { - const service = disposables.add(new FileService(new NullLogService())); - - const atomicResource = URI.parse('test://foo/bar/atomic'); - const nonAtomicResource = URI.parse('test://foo/nonatomic'); - - let atomicReadCounter = 0; - let atomicWriteCounter = 0; - let atomicDeleteCounter = 0; - - const provider = new class extends NullFileSystemProvider implements IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileAtomicWriteCapability, IFileSystemProviderWithFileAtomicDeleteCapability { - - override async stat(resource: URI): Promise { - return { - type: FileType.File, - ctime: Date.now(), - mtime: Date.now(), - size: 0 - }; - } - - override async readFile(resource: URI, opts?: IFileAtomicReadOptions): Promise { - if (opts?.atomic) { - atomicReadCounter++; - } - return new Uint8Array(); - } - - override readFileStream(resource: URI, opts: IFileReadStreamOptions, token: CancellationToken): ReadableStreamEvents { - return newWriteableStream(chunk => chunk[0]); - } - - enforceAtomicReadFile(resource: URI): boolean { - return isEqual(resource, atomicResource); - } - - override async writeFile(resource: URI, content: Uint8Array, opts: IFileAtomicWriteOptions): Promise { - if (opts.atomic) { - atomicWriteCounter++; - } - } - - enforceAtomicWriteFile(resource: URI): IFileAtomicOptions | false { - return isEqual(resource, atomicResource) ? { postfix: '.tmp' } : false; - } - - override async delete(resource: URI, opts: IFileAtomicDeleteOptions): Promise { - if (opts.atomic) { - atomicDeleteCounter++; - } - } - - enforceAtomicDelete(resource: URI): IFileAtomicOptions | false { - return isEqual(resource, atomicResource) ? { postfix: '.tmp' } : false; - } - }; - - provider.setCapabilities( - FileSystemProviderCapabilities.FileReadWrite | - FileSystemProviderCapabilities.FileOpenReadWriteClose | - FileSystemProviderCapabilities.FileReadStream | - FileSystemProviderCapabilities.FileAtomicRead | - FileSystemProviderCapabilities.FileAtomicWrite | - FileSystemProviderCapabilities.FileAtomicDelete - ); - - disposables.add(service.registerProvider('test', provider)); - - await service.readFile(atomicResource); - await service.readFile(nonAtomicResource); - await service.readFileStream(atomicResource); - await service.readFileStream(nonAtomicResource); - - await service.writeFile(atomicResource, VSBuffer.fromString('')); - await service.writeFile(nonAtomicResource, VSBuffer.fromString('')); - - await service.writeFile(atomicResource, bufferToStream(VSBuffer.fromString(''))); - await service.writeFile(nonAtomicResource, bufferToStream(VSBuffer.fromString(''))); - - await service.writeFile(atomicResource, bufferToReadable(VSBuffer.fromString(''))); - await service.writeFile(nonAtomicResource, bufferToReadable(VSBuffer.fromString(''))); - - await service.del(atomicResource); - await service.del(nonAtomicResource); - assert.strictEqual(atomicReadCounter, 2); - assert.strictEqual(atomicWriteCounter, 3); - assert.strictEqual(atomicDeleteCounter, 1); + disposable.dispose(); }); ensureNoDisposablesAreLeakedInTestSuite(); diff --git a/src/vs/platform/files/test/common/nullFileSystemProvider.ts b/src/vs/platform/files/test/common/nullFileSystemProvider.ts index 59862eaf63fff7..291682d58c152c 100644 --- a/src/vs/platform/files/test/common/nullFileSystemProvider.ts +++ b/src/vs/platform/files/test/common/nullFileSystemProvider.ts @@ -3,12 +3,10 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { CancellationToken } from 'vs/base/common/cancellation'; import { Emitter, Event } from 'vs/base/common/event'; import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; -import { ReadableStreamEvents } from 'vs/base/common/stream'; import { URI } from 'vs/base/common/uri'; -import { IFileDeleteOptions, IFileOpenOptions, IFileOverwriteOptions, FileSystemProviderCapabilities, FileType, IFileWriteOptions, IFileChange, IFileSystemProvider, IStat, IWatchOptions, IFileReadStreamOptions } from 'vs/platform/files/common/files'; +import { IFileDeleteOptions, IFileOpenOptions, IFileOverwriteOptions, FileSystemProviderCapabilities, FileType, IFileWriteOptions, IFileChange, IFileSystemProvider, IStat, IWatchOptions } from 'vs/platform/files/common/files'; export class NullFileSystemProvider implements IFileSystemProvider { @@ -38,12 +36,11 @@ export class NullFileSystemProvider implements IFileSystemProvider { async readdir(resource: URI): Promise<[string, FileType][]> { return undefined!; } async delete(resource: URI, opts: IFileDeleteOptions): Promise { return undefined; } async rename(from: URI, to: URI, opts: IFileOverwriteOptions): Promise { return undefined; } - async copy(from: URI, to: URI, opts: IFileOverwriteOptions): Promise { return undefined; } - async readFile(resource: URI): Promise { return undefined!; } - readFileStream(resource: URI, opts: IFileReadStreamOptions, token: CancellationToken): ReadableStreamEvents { return undefined!; } - async writeFile(resource: URI, content: Uint8Array, opts: IFileWriteOptions): Promise { return undefined; } - async open(resource: URI, opts: IFileOpenOptions): Promise { return undefined!; } - async close(fd: number): Promise { return undefined; } - async read(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { return undefined!; } - async write(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { return undefined!; } + async copy?(from: URI, to: URI, opts: IFileOverwriteOptions): Promise { return undefined; } + async readFile?(resource: URI): Promise { return undefined!; } + async writeFile?(resource: URI, content: Uint8Array, opts: IFileWriteOptions): Promise { return undefined; } + async open?(resource: URI, opts: IFileOpenOptions): Promise { return undefined!; } + async close?(fd: number): Promise { return undefined; } + async read?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { return undefined!; } + async write?(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { return undefined!; } } diff --git a/src/vs/platform/userData/common/fileUserDataProvider.ts b/src/vs/platform/userData/common/fileUserDataProvider.ts index 3cddb5514a3a5f..47239b7856115e 100644 --- a/src/vs/platform/userData/common/fileUserDataProvider.ts +++ b/src/vs/platform/userData/common/fileUserDataProvider.ts @@ -2,14 +2,16 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Emitter } from 'vs/base/common/event'; +import { Event, Emitter } from 'vs/base/common/event'; import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; -import { IFileSystemProviderWithFileReadWriteCapability, IFileChange, IWatchOptions, IStat, IFileOverwriteOptions, FileType, IFileWriteOptions, IFileDeleteOptions, FileSystemProviderCapabilities, IFileSystemProviderWithFileReadStreamCapability, IFileReadStreamOptions, IFileSystemProviderWithFileAtomicReadCapability, hasFileFolderCopyCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, IFileOpenOptions, IFileSystemProviderWithFileAtomicWriteCapability, IFileSystemProviderWithFileAtomicDeleteCapability, IFileSystemProviderWithFileFolderCopyCapability, IFileSystemProviderWithFileCloneCapability, hasFileCloneCapability, IFileAtomicReadOptions, IFileAtomicOptions } from 'vs/platform/files/common/files'; +import { IFileSystemProviderWithFileReadWriteCapability, IFileChange, IWatchOptions, IStat, IFileOverwriteOptions, FileType, IFileWriteOptions, IFileDeleteOptions, FileSystemProviderCapabilities, IFileSystemProviderWithFileReadStreamCapability, IFileReadStreamOptions, IFileSystemProviderWithFileAtomicReadCapability, IFileSystemProviderWithFileFolderCopyCapability, hasFileFolderCopyCapability, hasFileAtomicWriteCapability } from 'vs/platform/files/common/files'; import { URI } from 'vs/base/common/uri'; import { CancellationToken } from 'vs/base/common/cancellation'; -import { ReadableStreamEvents } from 'vs/base/common/stream'; +import { newWriteableStream, ReadableStreamEvents } from 'vs/base/common/stream'; import { ILogService } from 'vs/platform/log/common/log'; import { TernarySearchTree } from 'vs/base/common/ternarySearchTree'; +import { VSBuffer } from 'vs/base/common/buffer'; +import { isObject } from 'vs/base/common/types'; import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; import { ResourceSet } from 'vs/base/common/map'; import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity'; @@ -21,63 +23,44 @@ import { IUriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentity' */ export class FileUserDataProvider extends Disposable implements IFileSystemProviderWithFileReadWriteCapability, - IFileSystemProviderWithOpenReadWriteCloseCapability, IFileSystemProviderWithFileReadStreamCapability, - IFileSystemProviderWithFileFolderCopyCapability, IFileSystemProviderWithFileAtomicReadCapability, - IFileSystemProviderWithFileAtomicWriteCapability, - IFileSystemProviderWithFileAtomicDeleteCapability, - IFileSystemProviderWithFileCloneCapability { + IFileSystemProviderWithFileFolderCopyCapability { - readonly capabilities = this.fileSystemProvider.capabilities; - readonly onDidChangeCapabilities = this.fileSystemProvider.onDidChangeCapabilities; + get capabilities() { return this.fileSystemProvider.capabilities & ~FileSystemProviderCapabilities.FileOpenReadWriteClose; } + readonly onDidChangeCapabilities: Event = this.fileSystemProvider.onDidChangeCapabilities; private readonly _onDidChangeFile = this._register(new Emitter()); - readonly onDidChangeFile = this._onDidChangeFile.event; + readonly onDidChangeFile: Event = this._onDidChangeFile.event; private readonly watchResources = TernarySearchTree.forUris(() => !(this.capabilities & FileSystemProviderCapabilities.PathCaseSensitive)); - private readonly atomicReadWriteResources = new ResourceSet((uri) => this.uriIdentityService.extUri.getComparisonKey(this.toFileSystemResource(uri))); + private readonly atomicWritesResources: ResourceSet; constructor( private readonly fileSystemScheme: string, - private readonly fileSystemProvider: IFileSystemProviderWithFileReadWriteCapability & IFileSystemProviderWithOpenReadWriteCloseCapability & IFileSystemProviderWithFileReadStreamCapability & IFileSystemProviderWithFileAtomicReadCapability & IFileSystemProviderWithFileAtomicWriteCapability & IFileSystemProviderWithFileAtomicDeleteCapability, + private readonly fileSystemProvider: IFileSystemProviderWithFileReadWriteCapability & (IFileSystemProviderWithFileReadStreamCapability | IFileSystemProviderWithFileAtomicReadCapability | IFileSystemProviderWithFileFolderCopyCapability), private readonly userDataScheme: string, private readonly userDataProfilesService: IUserDataProfilesService, - private readonly uriIdentityService: IUriIdentityService, + uriIdentityService: IUriIdentityService, private readonly logService: ILogService, ) { super(); - this.updateAtomicReadWritesResources(); - this._register(userDataProfilesService.onDidChangeProfiles(() => this.updateAtomicReadWritesResources())); + this.atomicWritesResources = new ResourceSet((uri) => uriIdentityService.extUri.getComparisonKey(this.toFileSystemResource(uri))); + this.updateAtomicWritesResources(); + this._register(userDataProfilesService.onDidChangeProfiles(() => this.updateAtomicWritesResources())); this._register(this.fileSystemProvider.onDidChangeFile(e => this.handleFileChanges(e))); } - private updateAtomicReadWritesResources(): void { - this.atomicReadWriteResources.clear(); + private updateAtomicWritesResources(): void { + this.atomicWritesResources.clear(); for (const profile of this.userDataProfilesService.profiles) { - this.atomicReadWriteResources.add(profile.settingsResource); - this.atomicReadWriteResources.add(profile.keybindingsResource); - this.atomicReadWriteResources.add(profile.tasksResource); - this.atomicReadWriteResources.add(profile.extensionsResource); + this.atomicWritesResources.add(profile.settingsResource); + this.atomicWritesResources.add(profile.keybindingsResource); + this.atomicWritesResources.add(profile.tasksResource); + this.atomicWritesResources.add(profile.extensionsResource); } } - open(resource: URI, opts: IFileOpenOptions): Promise { - return this.fileSystemProvider.open(this.toFileSystemResource(resource), opts); - } - - close(fd: number): Promise { - return this.fileSystemProvider.close(fd); - } - - read(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { - return this.fileSystemProvider.read(fd, pos, data, offset, length); - } - - write(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { - return this.fileSystemProvider.write(fd, pos, data, offset, length); - } - watch(resource: URI, opts: IWatchOptions): IDisposable { this.watchResources.set(resource, resource); const disposable = this.fileSystemProvider.watch(this.toFileSystemResource(resource), opts); @@ -99,32 +82,33 @@ export class FileUserDataProvider extends Disposable implements return this.fileSystemProvider.rename(this.toFileSystemResource(from), this.toFileSystemResource(to), opts); } - readFile(resource: URI, opts?: IFileAtomicReadOptions): Promise { - return this.fileSystemProvider.readFile(this.toFileSystemResource(resource), opts); + readFile(resource: URI): Promise { + return this.fileSystemProvider.readFile(this.toFileSystemResource(resource), { atomic: true }); } readFileStream(resource: URI, opts: IFileReadStreamOptions, token: CancellationToken): ReadableStreamEvents { - return this.fileSystemProvider.readFileStream(this.toFileSystemResource(resource), opts, token); + const stream = newWriteableStream(data => VSBuffer.concat(data.map(data => VSBuffer.wrap(data))).buffer); + (async () => { + try { + const contents = await this.readFile(resource); + stream.end(contents); + } catch (error) { + stream.error(error); + stream.end(); + } + })(); + return stream; } readdir(resource: URI): Promise<[string, FileType][]> { return this.fileSystemProvider.readdir(this.toFileSystemResource(resource)); } - enforceAtomicReadFile(resource: URI): boolean { - return this.atomicReadWriteResources.has(resource); - } - writeFile(resource: URI, content: Uint8Array, opts: IFileWriteOptions): Promise { - return this.fileSystemProvider.writeFile(this.toFileSystemResource(resource), content, opts); - } - - enforceAtomicWriteFile(resource: URI): IFileAtomicOptions | false { - if (this.atomicReadWriteResources.has(resource)) { - return { postfix: '.vsctmp' }; + if (this.atomicWritesResources.has(resource) && !isObject(opts.atomic) && hasFileAtomicWriteCapability(this.fileSystemProvider)) { + opts = { ...opts, atomic: { postfix: '.vsctmp' } }; } - - return false; + return this.fileSystemProvider.writeFile(this.toFileSystemResource(resource), content, opts); } delete(resource: URI, opts: IFileDeleteOptions): Promise { @@ -138,13 +122,6 @@ export class FileUserDataProvider extends Disposable implements throw new Error('copy not supported'); } - cloneFile(from: URI, to: URI): Promise { - if (hasFileCloneCapability(this.fileSystemProvider)) { - return this.fileSystemProvider.cloneFile(this.toFileSystemResource(from), this.toFileSystemResource(to)); - } - throw new Error('clone not supported'); - } - private handleFileChanges(changes: readonly IFileChange[]): void { const userDataChanges: IFileChange[] = []; for (const change of changes) { diff --git a/src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts b/src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts index ef65f7c57e5d29..2a88a1d2c5ff7d 100644 --- a/src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts +++ b/src/vs/platform/userData/test/browser/fileUserDataProvider.test.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import * as assert from 'assert'; -import { IFileService, FileChangeType, IFileChange, IFileSystemProviderWithFileReadWriteCapability, IStat, FileType, FileSystemProviderCapabilities, IFileSystemProviderWithOpenReadWriteCloseCapability, IFileOpenOptions, IFileSystemProviderWithFileReadStreamCapability, IFileReadStreamOptions } from 'vs/platform/files/common/files'; +import { IFileService, FileChangeType, IFileChange, IFileSystemProviderWithFileReadWriteCapability, IStat, FileType, FileSystemProviderCapabilities } from 'vs/platform/files/common/files'; import { FileService } from 'vs/platform/files/common/fileService'; import { NullLogService } from 'vs/platform/log/common/log'; import { Schemas } from 'vs/base/common/network'; @@ -21,8 +21,6 @@ import product from 'vs/platform/product/common/product'; import { IUserDataProfilesService, UserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; import { UriIdentityService } from 'vs/platform/uriIdentity/common/uriIdentityService'; import { ensureNoDisposablesAreLeakedInTestSuite } from 'vs/base/test/common/utils'; -import { CancellationToken } from 'vs/base/common/cancellation'; -import { ReadableStreamEvents } from 'vs/base/common/stream'; const ROOT = URI.file('tests').with({ scheme: 'vscode-tests' }); @@ -280,11 +278,10 @@ suite('FileUserDataProvider', () => { }); }); -class TestFileSystemProvider implements IFileSystemProviderWithFileReadWriteCapability, IFileSystemProviderWithOpenReadWriteCloseCapability, IFileSystemProviderWithFileReadStreamCapability { +class TestFileSystemProvider implements IFileSystemProviderWithFileReadWriteCapability { constructor(readonly onDidChangeFile: Event) { } - readonly capabilities: FileSystemProviderCapabilities = FileSystemProviderCapabilities.FileReadWrite; readonly onDidChangeCapabilities: Event = Event.None; @@ -304,12 +301,7 @@ class TestFileSystemProvider implements IFileSystemProviderWithFileReadWriteCapa writeFile(): Promise { throw new Error('Not Supported'); } delete(): Promise { throw new Error('Not Supported'); } - open(resource: URI, opts: IFileOpenOptions): Promise { throw new Error('Not Supported'); } - close(fd: number): Promise { throw new Error('Not Supported'); } - read(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { throw new Error('Not Supported'); } - write(fd: number, pos: number, data: Uint8Array, offset: number, length: number): Promise { throw new Error('Not Supported'); } - readFileStream(resource: URI, opts: IFileReadStreamOptions, token: CancellationToken): ReadableStreamEvents { throw new Error('Method not implemented.'); } } suite('FileUserDataProvider - Watching', () => { diff --git a/src/vs/workbench/api/browser/mainThreadSCM.ts b/src/vs/workbench/api/browser/mainThreadSCM.ts index 5ddf13e573e24b..40e92bf942c071 100644 --- a/src/vs/workbench/api/browser/mainThreadSCM.ts +++ b/src/vs/workbench/api/browser/mainThreadSCM.ts @@ -16,7 +16,7 @@ import { MarshalledId } from 'vs/base/common/marshallingIds'; import { ThemeIcon } from 'vs/base/common/themables'; import { IMarkdownString } from 'vs/base/common/htmlContent'; import { IQuickDiffService, QuickDiffProvider } from 'vs/workbench/contrib/scm/common/quickDiff'; -import { ISCMHistoryItem, ISCMHistoryItemChange, ISCMHistoryItemGroup, ISCMHistoryOptions, ISCMHistoryProvider } from 'vs/workbench/contrib/scm/common/history'; +import { ISCMHistoryItem, ISCMHistoryItemChange, ISCMHistoryOptions, ISCMHistoryProvider } from 'vs/workbench/contrib/scm/common/history'; function getSCMHistoryItemIcon(historyItem: SCMHistoryItemDto): URI | { light: URI; dark: URI } | ThemeIcon | undefined { if (!historyItem.icon) { @@ -104,55 +104,6 @@ class MainThreadSCMResource implements ISCMResource { } } -class MainThreadSCMHistoryProvider implements ISCMHistoryProvider { - - private _onDidChangeActionButton = new Emitter(); - readonly onDidChangeActionButton = this._onDidChangeActionButton.event; - - private _onDidChangeCurrentHistoryItemGroup = new Emitter(); - readonly onDidChangeCurrentHistoryItemGroup = this._onDidChangeCurrentHistoryItemGroup.event; - - private _actionButton: ISCMActionButtonDescriptor | undefined; - get actionButton(): ISCMActionButtonDescriptor | undefined { return this._actionButton; } - set actionButton(actionButton: ISCMActionButtonDescriptor | undefined) { - this._actionButton = actionButton; - this._onDidChangeActionButton.fire(); - } - - private _currentHistoryItemGroup: ISCMHistoryItemGroup | undefined; - get currentHistoryItemGroup(): ISCMHistoryItemGroup | undefined { return this._currentHistoryItemGroup; } - set currentHistoryItemGroup(historyItemGroup: ISCMHistoryItemGroup | undefined) { - this._currentHistoryItemGroup = historyItemGroup; - this._onDidChangeCurrentHistoryItemGroup.fire(); - } - - constructor(private readonly proxy: ExtHostSCMShape, private readonly handle: number) { } - - async resolveHistoryItemGroupBase(historyItemGroupId: string): Promise { - return this.proxy.$resolveHistoryItemGroupBase(this.handle, historyItemGroupId, CancellationToken.None); - } - - async resolveHistoryItemGroupCommonAncestor(historyItemGroupId1: string, historyItemGroupId2: string): Promise<{ id: string; ahead: number; behind: number } | undefined> { - return this.proxy.$resolveHistoryItemGroupCommonAncestor(this.handle, historyItemGroupId1, historyItemGroupId2, CancellationToken.None); - } - - async provideHistoryItems(historyItemGroupId: string, options: ISCMHistoryOptions): Promise { - const historyItems = await this.proxy.$provideHistoryItems(this.handle, historyItemGroupId, options, CancellationToken.None); - return historyItems?.map(historyItem => ({ ...historyItem, icon: getSCMHistoryItemIcon(historyItem), })); - } - - async provideHistoryItemChanges(historyItemId: string): Promise { - const changes = await this.proxy.$provideHistoryItemChanges(this.handle, historyItemId, CancellationToken.None); - return changes?.map(change => ({ - uri: URI.revive(change.uri), - originalUri: change.originalUri && URI.revive(change.originalUri), - modifiedUri: change.modifiedUri && URI.revive(change.modifiedUri), - renameUri: change.renameUri && URI.revive(change.renameUri) - })); - } - -} - class MainThreadSCMProvider implements ISCMProvider, QuickDiffProvider { private static ID_HANDLE = 0; @@ -196,8 +147,11 @@ class MainThreadSCMProvider implements ISCMProvider, QuickDiffProvider { private readonly _onDidChangeStatusBarCommands = new Emitter(); get onDidChangeStatusBarCommands(): Event { return this._onDidChangeStatusBarCommands.event; } - private readonly _onDidChangeHistoryProvider = new Emitter(); - readonly onDidChangeHistoryProvider: Event = this._onDidChangeHistoryProvider.event; + private readonly _onDidChangeHistoryProviderActionButton = new Emitter(); + readonly onDidChangeHistoryProviderActionButton: Event = this._onDidChangeHistoryProviderActionButton.event; + + private readonly _onDidChangeHistoryProviderCurrentHistoryItemGroup = new Emitter(); + readonly onDidChangeHistoryProviderCurrentHistoryItemGroup: Event = this._onDidChangeHistoryProviderCurrentHistoryItemGroup.event; private readonly _onDidChange = new Emitter(); readonly onDidChange: Event = this._onDidChange.event; @@ -206,6 +160,8 @@ class MainThreadSCMProvider implements ISCMProvider, QuickDiffProvider { public readonly isSCM: boolean = true; private _historyProvider: ISCMHistoryProvider | undefined; + private _historyProviderActionButton: SCMActionButtonDto | undefined | null; + private _historyProviderCurrentHistoryItemGroup: SCMHistoryItemGroupDto | undefined; constructor( private readonly proxy: ExtHostSCMShape, @@ -242,11 +198,15 @@ class MainThreadSCMProvider implements ISCMProvider, QuickDiffProvider { } if (features.hasHistoryProvider && !this._historyProvider) { - this._historyProvider = new MainThreadSCMHistoryProvider(this.proxy, this.handle); - this._onDidChangeHistoryProvider.fire(); + this._historyProvider = { + actionButton: () => this._historyProviderActionButton ?? undefined, + currentHistoryItemGroup: () => this._historyProviderCurrentHistoryItemGroup ?? undefined, + provideHistoryItems: (historyItemGroupId, options) => this.provideHistoryItems(historyItemGroupId, options), + provideHistoryItemChanges: (historyItemId: string) => this.provideHistoryItemChanges(historyItemId), + resolveHistoryItemGroupCommonAncestor: (historyItemGroupId1, historyItemGroupId2) => this.resolveHistoryItemGroupCommonAncestor(historyItemGroupId1, historyItemGroupId2), + }; } else if (features.hasHistoryProvider === false && this._historyProvider) { this._historyProvider = undefined; - this._onDidChangeHistoryProvider.fire(); } } @@ -358,19 +318,32 @@ class MainThreadSCMProvider implements ISCMProvider, QuickDiffProvider { } $onDidChangeHistoryProviderActionButton(actionButton?: SCMActionButtonDto | null): void { - if (!this._historyProvider) { - return; - } - - this._historyProvider.actionButton = actionButton ?? undefined; + this._historyProviderActionButton = actionButton; + this._onDidChangeHistoryProviderActionButton.fire(); } $onDidChangeHistoryProviderCurrentHistoryItemGroup(currentHistoryItemGroup?: SCMHistoryItemGroupDto): void { - if (!this._historyProvider) { - return; - } + this._historyProviderCurrentHistoryItemGroup = currentHistoryItemGroup; + this._onDidChangeHistoryProviderCurrentHistoryItemGroup.fire(); + } + + async resolveHistoryItemGroupCommonAncestor(historyItemGroupId1: string, historyItemGroupId2: string | undefined): Promise<{ id: string; ahead: number; behind: number } | undefined> { + return this.proxy.$resolveHistoryItemGroupCommonAncestor(this.handle, historyItemGroupId1, historyItemGroupId2, CancellationToken.None); + } - this._historyProvider.currentHistoryItemGroup = currentHistoryItemGroup ?? undefined; + async provideHistoryItems(historyItemGroupId: string, options: ISCMHistoryOptions): Promise { + const historyItems = await this.proxy.$provideHistoryItems(this.handle, historyItemGroupId, options, CancellationToken.None); + return historyItems?.map(historyItem => ({ ...historyItem, icon: getSCMHistoryItemIcon(historyItem), })); + } + + async provideHistoryItemChanges(historyItemId: string): Promise { + const changes = await this.proxy.$provideHistoryItemChanges(this.handle, historyItemId, CancellationToken.None); + return changes?.map(change => ({ + uri: URI.revive(change.uri), + originalUri: change.originalUri && URI.revive(change.originalUri), + modifiedUri: change.modifiedUri && URI.revive(change.modifiedUri), + renameUri: change.renameUri && URI.revive(change.renameUri) + })); } toJSON(): any { diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index ea5ccab44fc790..5591666698c132 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -26,6 +26,7 @@ import * as languages from 'vs/editor/common/languages'; import { CharacterPair, CommentRule, EnterAction } from 'vs/editor/common/languages/languageConfiguration'; import { EndOfLineSequence } from 'vs/editor/common/model'; import { IModelChangedEvent } from 'vs/editor/common/model/mirrorTextModel'; +import { IInlineChatRequest, IInlineChatResponse, IInlineChatSession, InlineChatResponseFeedbackKind } from 'vs/workbench/contrib/inlineChat/common/inlineChat'; import { IAccessibilityInformation } from 'vs/platform/accessibility/common/accessibility'; import { ConfigurationTarget, IConfigurationChange, IConfigurationData, IConfigurationOverrides } from 'vs/platform/configuration/common/configuration'; import { ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; @@ -49,13 +50,8 @@ import * as tasks from 'vs/workbench/api/common/shared/tasks'; import { SaveReason } from 'vs/workbench/common/editor'; import { IRevealOptions, ITreeItem, IViewBadge } from 'vs/workbench/common/views'; import { CallHierarchyItem } from 'vs/workbench/contrib/callHierarchy/common/callHierarchy'; -import { IChatAgentMetadata } from 'vs/workbench/contrib/chat/common/chatAgents'; -import { IChatMessage, IChatResponseFragment, IChatResponseProviderMetadata } from 'vs/workbench/contrib/chat/common/chatProvider'; -import { IChatDynamicRequest, IChatFollowup, IChatReplyFollowup, IChatResponseErrorDetails, IChatUserActionEvent, ISlashCommand } from 'vs/workbench/contrib/chat/common/chatService'; -import { IChatSlashFragment } from 'vs/workbench/contrib/chat/common/chatSlashCommands'; -import { IChatRequestVariableValue, IChatVariableData } from 'vs/workbench/contrib/chat/common/chatVariables'; import { DebugConfigurationProviderTriggerKind, IAdapterDescriptor, IConfig, IDebugSessionReplMode } from 'vs/workbench/contrib/debug/common/debug'; -import { IInlineChatBulkEditResponse, IInlineChatEditResponse, IInlineChatMessageResponse, IInlineChatRequest, IInlineChatSession, InlineChatResponseFeedbackKind } from 'vs/workbench/contrib/inlineChat/common/inlineChat'; +import { IChatResponseErrorDetails, IChatDynamicRequest, IChatFollowup, IChatReplyFollowup, IChatUserActionEvent, ISlashCommand } from 'vs/workbench/contrib/chat/common/chatService'; import * as notebookCommon from 'vs/workbench/contrib/notebook/common/notebookCommon'; import { CellExecutionUpdateType } from 'vs/workbench/contrib/notebook/common/notebookExecutionService'; import { ICellExecutionComplete, ICellExecutionStateUpdate } from 'vs/workbench/contrib/notebook/common/notebookExecutionStateService'; @@ -65,8 +61,7 @@ import { IWorkspaceSymbol } from 'vs/workbench/contrib/search/common/search'; import { CoverageDetails, ExtensionRunTestsRequest, ICallProfileRunHandler, IFileCoverage, ISerializedTestResults, IStartControllerTests, ITestItem, ITestMessage, ITestRunProfile, ITestRunTask, ResolvedTestRunRequest, TestResultState, TestsDiffOp } from 'vs/workbench/contrib/testing/common/testTypes'; import { Timeline, TimelineChangeEvent, TimelineOptions, TimelineProviderDescriptor } from 'vs/workbench/contrib/timeline/common/timeline'; import { TypeHierarchyItem } from 'vs/workbench/contrib/typeHierarchy/common/typeHierarchy'; -import { RelatedInformationResult, RelatedInformationType } from 'vs/workbench/services/aiRelatedInformation/common/aiRelatedInformation'; -import { AuthenticationProviderInformation, AuthenticationSession, AuthenticationSessionsChangeEvent, IAuthenticationCreateSessionOptions } from 'vs/workbench/services/authentication/common/authentication'; +import { IAuthenticationCreateSessionOptions, AuthenticationProviderInformation, AuthenticationSession, AuthenticationSessionsChangeEvent } from 'vs/workbench/services/authentication/common/authentication'; import { EditorGroupColumn } from 'vs/workbench/services/editor/common/editorGroupColumn'; import { IExtensionDescriptionDelta, IStaticWorkspaceData } from 'vs/workbench/services/extensions/common/extensionHostProtocol'; import { IResolveAuthorityResult } from 'vs/workbench/services/extensions/common/extensionHostProxy'; @@ -78,6 +73,11 @@ import { CandidatePort } from 'vs/workbench/services/remote/common/tunnelModel'; import { ITextQueryBuilderOptions } from 'vs/workbench/services/search/common/queryBuilder'; import * as search from 'vs/workbench/services/search/common/search'; import { ISaveProfileResult } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; +import { IChatMessage, IChatResponseFragment, IChatResponseProviderMetadata } from 'vs/workbench/contrib/chat/common/chatProvider'; +import { IChatSlashFragment } from 'vs/workbench/contrib/chat/common/chatSlashCommands'; +import { IChatRequestVariableValue, IChatVariableData } from 'vs/workbench/contrib/chat/common/chatVariables'; +import { RelatedInformationResult, RelatedInformationType } from 'vs/workbench/services/aiRelatedInformation/common/aiRelatedInformation'; +import { IChatAgentMetadata } from 'vs/workbench/contrib/chat/common/chatAgents'; export interface IWorkspaceData extends IStaticWorkspaceData { folders: { uri: UriComponents; name: string; index: number }[]; @@ -1180,7 +1180,7 @@ export interface MainThreadInlineChatShape extends IDisposable { $unregisterInteractiveEditorProvider(handle: number): Promise; } -export type IInlineChatResponseDto = Dto & { edits: IWorkspaceEditDto } | IInlineChatMessageResponse>; +export type IInlineChatResponseDto = Dto; export interface ExtHostInlineChatShape { $prepareSession(handle: number, uri: UriComponents, range: ISelection, token: CancellationToken): Promise; @@ -2159,8 +2159,7 @@ export interface ExtHostSCMShape { $setSelectedSourceControl(selectedSourceControlHandle: number | undefined): Promise; $provideHistoryItems(sourceControlHandle: number, historyItemGroupId: string, options: any, token: CancellationToken): Promise; $provideHistoryItemChanges(sourceControlHandle: number, historyItemId: string, token: CancellationToken): Promise; - $resolveHistoryItemGroupBase(sourceControlHandle: number, historyItemGroupId: string, token: CancellationToken): Promise; - $resolveHistoryItemGroupCommonAncestor(sourceControlHandle: number, historyItemGroupId1: string, historyItemGroupId2: string, token: CancellationToken): Promise<{ id: string; ahead: number; behind: number } | undefined>; + $resolveHistoryItemGroupCommonAncestor(sourceControlHandle: number, historyItemGroupId1: string, historyItemGroupId2: string | undefined, token: CancellationToken): Promise<{ id: string; ahead: number; behind: number } | undefined>; } export interface ExtHostQuickDiffShape { diff --git a/src/vs/workbench/api/common/extHostSCM.ts b/src/vs/workbench/api/common/extHostSCM.ts index 561592baf84218..307ff297dc7419 100644 --- a/src/vs/workbench/api/common/extHostSCM.ts +++ b/src/vs/workbench/api/common/extHostSCM.ts @@ -11,7 +11,7 @@ import { debounce } from 'vs/base/common/decorators'; import { DisposableStore, IDisposable, MutableDisposable } from 'vs/base/common/lifecycle'; import { asPromise } from 'vs/base/common/async'; import { ExtHostCommands } from 'vs/workbench/api/common/extHostCommands'; -import { MainContext, MainThreadSCMShape, SCMRawResource, SCMRawResourceSplice, SCMRawResourceSplices, IMainContext, ExtHostSCMShape, ICommandDto, MainThreadTelemetryShape, SCMGroupFeatures, SCMHistoryItemDto, SCMHistoryItemChangeDto, SCMHistoryItemGroupDto } from './extHost.protocol'; +import { MainContext, MainThreadSCMShape, SCMRawResource, SCMRawResourceSplice, SCMRawResourceSplices, IMainContext, ExtHostSCMShape, ICommandDto, MainThreadTelemetryShape, SCMGroupFeatures, SCMHistoryItemDto, SCMHistoryItemChangeDto } from './extHost.protocol'; import { sortedDiff, equals } from 'vs/base/common/arrays'; import { comparePaths } from 'vs/base/common/comparers'; import type * as vscode from 'vscode'; @@ -952,12 +952,7 @@ export class ExtHostSCM implements ExtHostSCMShape { return Promise.resolve(undefined); } - async $resolveHistoryItemGroupBase(sourceControlHandle: number, historyItemGroupId: string, token: CancellationToken): Promise { - const historyProvider = this._sourceControls.get(sourceControlHandle)?.historyProvider; - return await historyProvider?.resolveHistoryItemGroupBase(historyItemGroupId, token) ?? undefined; - } - - async $resolveHistoryItemGroupCommonAncestor(sourceControlHandle: number, historyItemGroupId1: string, historyItemGroupId2: string, token: CancellationToken): Promise<{ id: string; ahead: number; behind: number } | undefined> { + async $resolveHistoryItemGroupCommonAncestor(sourceControlHandle: number, historyItemGroupId1: string, historyItemGroupId2: string | undefined, token: CancellationToken): Promise<{ id: string; ahead: number; behind: number } | undefined> { const historyProvider = this._sourceControls.get(sourceControlHandle)?.historyProvider; return await historyProvider?.resolveHistoryItemGroupCommonAncestor(historyItemGroupId1, historyItemGroupId2, token) ?? undefined; } diff --git a/src/vs/workbench/browser/dnd.ts b/src/vs/workbench/browser/dnd.ts index 03550d2d646212..52afb8083d89f0 100644 --- a/src/vs/workbench/browser/dnd.ts +++ b/src/vs/workbench/browser/dnd.ts @@ -294,8 +294,8 @@ export function fillEditorsDragData(accessor: ServicesAccessor, resourcesOrEdito editor.encoding = textFileModel.getEncoding(); } - // contents (only if dirty and not too large) - if (typeof editor.contents !== 'string' && textFileModel.isDirty() && !textFileModel.textEditorModel.isTooLargeForHeapOperation()) { + // contents (only if dirty) + if (typeof editor.contents !== 'string' && textFileModel.isDirty()) { editor.contents = textFileModel.textEditorModel.getValue(); } } diff --git a/src/vs/workbench/browser/iconSelectBox.ts b/src/vs/workbench/browser/iconSelectBox.ts deleted file mode 100644 index e74f52687cd565..00000000000000 --- a/src/vs/workbench/browser/iconSelectBox.ts +++ /dev/null @@ -1,114 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { IIconSelectBoxOptions, IconSelectBox } from 'vs/base/browser/ui/icons/iconSelectBox'; -import { KeyCode } from 'vs/base/common/keyCodes'; -import * as dom from 'vs/base/browser/dom'; -import { ContextKeyExpr, IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; -import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; - -export const WorkbenchIconSelectBoxFocusContextKey = new RawContextKey('iconSelectBoxFocus', true); -export const WorkbenchIconSelectBoxInputFocusContextKey = new RawContextKey('iconSelectBoxInputFocus', true); -export const WorkbenchIconSelectBoxInputEmptyContextKey = new RawContextKey('iconSelectBoxInputEmpty', true); - -export class WorkbenchIconSelectBox extends IconSelectBox { - - private static focusedWidget: WorkbenchIconSelectBox | undefined; - static getFocusedWidget(): WorkbenchIconSelectBox | undefined { - return WorkbenchIconSelectBox.focusedWidget; - } - - private readonly contextKeyService: IContextKeyService; - private readonly inputFocusContextKey: IContextKey; - private readonly inputEmptyContextKey: IContextKey; - - constructor( - options: IIconSelectBoxOptions, - @IContextKeyService contextKeyService: IContextKeyService - ) { - super(options); - this.contextKeyService = this._register(contextKeyService.createScoped(this.domNode)); - WorkbenchIconSelectBoxFocusContextKey.bindTo(this.contextKeyService); - this.inputFocusContextKey = WorkbenchIconSelectBoxInputFocusContextKey.bindTo(this.contextKeyService); - this.inputEmptyContextKey = WorkbenchIconSelectBoxInputEmptyContextKey.bindTo(this.contextKeyService); - if (this.inputBox) { - const focusTracker = this._register(dom.trackFocus(this.inputBox.inputElement)); - this._register(focusTracker.onDidFocus(() => this.inputFocusContextKey.set(true))); - this._register(focusTracker.onDidBlur(() => this.inputFocusContextKey.set(false))); - this._register(this.inputBox.onDidChange(() => this.inputEmptyContextKey.set(this.inputBox?.value.length === 0))); - } - } - - override focus(): void { - super.focus(); - WorkbenchIconSelectBox.focusedWidget = this; - } - -} - -KeybindingsRegistry.registerCommandAndKeybindingRule({ - id: 'iconSelectBox.focusUp', - weight: KeybindingWeight.WorkbenchContrib, - when: WorkbenchIconSelectBoxFocusContextKey, - primary: KeyCode.UpArrow, - handler: () => { - const selectBox = WorkbenchIconSelectBox.getFocusedWidget(); - if (selectBox) { - selectBox.focusPreviousRow(); - } - } -}); - -KeybindingsRegistry.registerCommandAndKeybindingRule({ - id: 'iconSelectBox.focusDown', - weight: KeybindingWeight.WorkbenchContrib, - when: WorkbenchIconSelectBoxFocusContextKey, - primary: KeyCode.DownArrow, - handler: () => { - const selectBox = WorkbenchIconSelectBox.getFocusedWidget(); - if (selectBox) { - selectBox.focusNextRow(); - } - } -}); - -KeybindingsRegistry.registerCommandAndKeybindingRule({ - id: 'iconSelectBox.focusNext', - weight: KeybindingWeight.WorkbenchContrib, - when: ContextKeyExpr.and(WorkbenchIconSelectBoxFocusContextKey, ContextKeyExpr.or(WorkbenchIconSelectBoxInputEmptyContextKey, WorkbenchIconSelectBoxInputFocusContextKey.toNegated())), - primary: KeyCode.RightArrow, - handler: () => { - const selectBox = WorkbenchIconSelectBox.getFocusedWidget(); - if (selectBox) { - selectBox.focusNext(); - } - } -}); - -KeybindingsRegistry.registerCommandAndKeybindingRule({ - id: 'iconSelectBox.focusPrevious', - weight: KeybindingWeight.WorkbenchContrib, - when: ContextKeyExpr.and(WorkbenchIconSelectBoxFocusContextKey, ContextKeyExpr.or(WorkbenchIconSelectBoxInputEmptyContextKey, WorkbenchIconSelectBoxInputFocusContextKey.toNegated())), - primary: KeyCode.LeftArrow, - handler: () => { - const selectBox = WorkbenchIconSelectBox.getFocusedWidget(); - if (selectBox) { - selectBox.focusPrevious(); - } - } -}); - -KeybindingsRegistry.registerCommandAndKeybindingRule({ - id: 'iconSelectBox.selectFocused', - weight: KeybindingWeight.WorkbenchContrib, - when: WorkbenchIconSelectBoxFocusContextKey, - primary: KeyCode.Enter, - handler: () => { - const selectBox = WorkbenchIconSelectBox.getFocusedWidget(); - if (selectBox) { - selectBox.setSelection(selectBox.getFocus()[0]); - } - } -}); diff --git a/src/vs/workbench/browser/parts/editor/media/editorplaceholder.css b/src/vs/workbench/browser/parts/editor/media/editorplaceholder.css index d4db8eaff00351..ad0d6936909364 100644 --- a/src/vs/workbench/browser/parts/editor/media/editorplaceholder.css +++ b/src/vs/workbench/browser/parts/editor/media/editorplaceholder.css @@ -44,8 +44,6 @@ max-width: 450px; text-align: center; word-break: break-word; - user-select: text; - -webkit-user-select: text; } .monaco-editor-pane-placeholder .editor-placeholder-buttons-container { diff --git a/src/vs/workbench/browser/parts/titlebar/commandCenterControl.ts b/src/vs/workbench/browser/parts/titlebar/commandCenterControl.ts index 30a4e589a06f02..2dbe0416b4ee6d 100644 --- a/src/vs/workbench/browser/parts/titlebar/commandCenterControl.ts +++ b/src/vs/workbench/browser/parts/titlebar/commandCenterControl.ts @@ -40,7 +40,7 @@ export class CommandCenterControl { const titleToolbar = instantiationService.createInstance(MenuWorkbenchToolBar, this.element, MenuId.CommandCenter, { contextMenu: MenuId.TitleBarContext, - hiddenItemStrategy: HiddenItemStrategy.NoHide, + hiddenItemStrategy: HiddenItemStrategy.Ignore, toolbarOptions: { primaryGroup: () => true, }, diff --git a/src/vs/workbench/contrib/chat/browser/chatInputPart.ts b/src/vs/workbench/contrib/chat/browser/chatInputPart.ts index eacb6649ac4510..97a2b1ee4ea5f6 100644 --- a/src/vs/workbench/contrib/chat/browser/chatInputPart.ts +++ b/src/vs/workbench/contrib/chat/browser/chatInputPart.ts @@ -225,7 +225,7 @@ export class ChatInputPart extends Disposable implements IHistoryNavigationWidge // Only allow history navigation when the input is empty. // (If this model change happened as a result of a history navigation, this is canceled out by a call in this.navigateHistory) const model = this._inputEditor.getModel(); - const inputHasText = !!model && model.getValueLength() > 0; + const inputHasText = !!model && model.getValue() !== ''; this.setHistoryNavigationEnablement(!inputHasText); this.inputEditorHasText.set(inputHasText); })); diff --git a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts index 9a48e8ea78c2a9..ebb17cc541f7fd 100644 --- a/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts +++ b/src/vs/workbench/contrib/chat/browser/chatListRenderer.ts @@ -14,7 +14,6 @@ import { ICompressedTreeNode } from 'vs/base/browser/ui/tree/compressedObjectTre import { ICompressibleTreeRenderer } from 'vs/base/browser/ui/tree/objectTree'; import { IAsyncDataSource, ITreeNode, ITreeRenderer } from 'vs/base/browser/ui/tree/tree'; import { IAction } from 'vs/base/common/actions'; -import { distinct } from 'vs/base/common/arrays'; import { IntervalTimer } from 'vs/base/common/async'; import { Codicon } from 'vs/base/common/codicons'; import { Emitter, Event } from 'vs/base/common/event'; @@ -32,7 +31,7 @@ import { EDITOR_FONT_DEFAULTS, IEditorOptions } from 'vs/editor/common/config/ed import { Range } from 'vs/editor/common/core/range'; import { ILanguageService } from 'vs/editor/common/languages/language'; import { PLAINTEXT_LANGUAGE_ID } from 'vs/editor/common/languages/modesRegistry'; -import { EndOfLinePreference, ITextModel } from 'vs/editor/common/model'; +import { ITextModel } from 'vs/editor/common/model'; import { IModelService } from 'vs/editor/common/services/model'; import { BracketMatchingController } from 'vs/editor/contrib/bracketMatching/browser/bracketMatching'; import { ContextMenuController } from 'vs/editor/contrib/contextmenu/browser/contextmenu'; @@ -53,7 +52,6 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection'; import { WorkbenchCompressibleAsyncDataTree } from 'vs/platform/list/browser/listService'; import { ILogService } from 'vs/platform/log/common/log'; -import { IOpenerService } from 'vs/platform/opener/common/opener'; import { defaultButtonStyles } from 'vs/platform/theme/browser/defaultStyles'; import { IThemeService } from 'vs/platform/theme/common/themeService'; import { IResourceLabel, ResourceLabels } from 'vs/workbench/browser/labels'; @@ -63,9 +61,7 @@ import { IChatCodeBlockActionContext } from 'vs/workbench/contrib/chat/browser/a import { ChatTreeItem, IChatCodeBlockInfo, IChatFileTreeInfo } from 'vs/workbench/contrib/chat/browser/chat'; import { ChatFollowups } from 'vs/workbench/contrib/chat/browser/chatFollowups'; import { ChatEditorOptions } from 'vs/workbench/contrib/chat/browser/chatOptions'; -import { fixVariableReferences, walkTreeAndAnnotateResourceLinks } from 'vs/workbench/contrib/chat/browser/chatVariableReferenceRenderer'; import { CONTEXT_REQUEST, CONTEXT_RESPONSE, CONTEXT_RESPONSE_FILTERED, CONTEXT_RESPONSE_HAS_PROVIDER_ID, CONTEXT_RESPONSE_VOTE } from 'vs/workbench/contrib/chat/common/chatContextKeys'; -import { IPlaceholderMarkdownString } from 'vs/workbench/contrib/chat/common/chatModel'; import { IChatReplyFollowup, IChatResponseProgressFileTreeData, IChatService, ISlashCommand, InteractiveSessionVoteDirection } from 'vs/workbench/contrib/chat/common/chatService'; import { IChatResponseMarkdownRenderData, IChatResponseRenderData, IChatResponseViewModel, IChatWelcomeMessageViewModel, isRequestVM, isResponseVM, isWelcomeVM } from 'vs/workbench/contrib/chat/common/chatViewModel'; import { IWordCountResult, getNWords } from 'vs/workbench/contrib/chat/common/chatWordCounter'; @@ -74,6 +70,9 @@ import { SelectionClipboardContributionID } from 'vs/workbench/contrib/codeEdito import { getSimpleEditorOptions } from 'vs/workbench/contrib/codeEditor/browser/simpleEditorOptions'; import { createFileIconThemableTreeContainerScope } from 'vs/workbench/contrib/files/browser/views/explorerView'; import { IFilesConfiguration } from 'vs/workbench/contrib/files/common/files'; +import { IOpenerService } from 'vs/platform/opener/common/opener'; +import { distinct } from 'vs/base/common/arrays'; +import { IPlaceholderMarkdownString } from 'vs/workbench/contrib/chat/common/chatModel'; const $ = dom.$; @@ -138,7 +137,7 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer { @@ -648,10 +642,6 @@ export class ChatListItemRenderer extends Disposable implements ITreeRenderer this.codeBlocksByResponseId.delete(element.id))); } - if (isRequestVM(element)) { - walkTreeAndAnnotateResourceLinks(result.element); - } - if (usedSlashCommand) { const slashCommandElement = $('span.interactive-slash-command', { title: usedSlashCommand.detail }, `/${usedSlashCommand.command} `); if (result.element.firstChild?.nodeName.toLowerCase() === 'p') { @@ -1006,7 +996,7 @@ class CodeBlockPart extends Disposable implements IChatResultCodeBlockPart { } private setText(newText: string): void { - const currentText = this.textModel.getValue(EndOfLinePreference.LF); + const currentText = this.textModel.getLinesContent().join('\n'); if (newText === currentText) { return; } diff --git a/src/vs/workbench/contrib/chat/browser/chatVariableReferenceRenderer.ts b/src/vs/workbench/contrib/chat/browser/chatVariableReferenceRenderer.ts deleted file mode 100644 index 1a7ad12b7b871a..00000000000000 --- a/src/vs/workbench/contrib/chat/browser/chatVariableReferenceRenderer.ts +++ /dev/null @@ -1,36 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import * as dom from 'vs/base/browser/dom'; -import { IMarkdownString, MarkdownString } from 'vs/base/common/htmlContent'; - -const variableRefUrlPrefix = 'http://vscodeVar_'; - -export function fixVariableReferences(markdown: IMarkdownString): IMarkdownString { - const fixedMarkdownSource = markdown.value.replace(/\]\(values:(.*)/g, `](${variableRefUrlPrefix}_$1`); - return new MarkdownString(fixedMarkdownSource, { isTrusted: markdown.isTrusted, supportThemeIcons: markdown.supportThemeIcons, supportHtml: markdown.supportHtml }); -} - -export function walkTreeAndAnnotateResourceLinks(element: HTMLElement): void { - element.querySelectorAll('a').forEach(a => { - const href = a.getAttribute('data-href'); - if (href) { - if (href.startsWith(variableRefUrlPrefix)) { - a.parentElement!.replaceChild( - renderResourceWidget(a.textContent!), - a); - } - } - - walkTreeAndAnnotateResourceLinks(a as HTMLElement); - }); -} - -function renderResourceWidget(name: string): HTMLElement { - const container = dom.$('span.chat-resource-widget'); - const alias = dom.$('span', undefined, name); - container.appendChild(alias); - return container; -} diff --git a/src/vs/workbench/contrib/chat/browser/media/chat.css b/src/vs/workbench/contrib/chat/browser/media/chat.css index 4283d10304e913..eb1c33b9fa676c 100644 --- a/src/vs/workbench/contrib/chat/browser/media/chat.css +++ b/src/vs/workbench/contrib/chat/browser/media/chat.css @@ -469,11 +469,3 @@ border-radius: 4px; width: auto; } - -.interactive-item-container .chat-resource-widget { - background-color: var(--vscode-chat-slashCommandBackground); - color: var(--vscode-chat-slashCommandForeground); - border-radius: 3px; - white-space: nowrap; - padding: 1px; -} diff --git a/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts b/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts index 8bdc8b214594d3..54dc2b944449a4 100644 --- a/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts +++ b/src/vs/workbench/contrib/chat/common/chatServiceImpl.ts @@ -23,7 +23,7 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { IChatAgentData, IChatAgentService } from 'vs/workbench/contrib/chat/common/chatAgents'; import { CONTEXT_PROVIDER_EXISTS } from 'vs/workbench/contrib/chat/common/chatContextKeys'; -import { ChatModel, ChatRequestModel, ChatWelcomeMessageModel, IChatModel, ISerializableChatData, ISerializableChatsData, isCompleteInteractiveProgressTreeData } from 'vs/workbench/contrib/chat/common/chatModel'; +import { ChatModel, ChatWelcomeMessageModel, IChatModel, ISerializableChatData, ISerializableChatsData, isCompleteInteractiveProgressTreeData } from 'vs/workbench/contrib/chat/common/chatModel'; import { ChatMessageRole, IChatMessage } from 'vs/workbench/contrib/chat/common/chatProvider'; import { IChat, IChatCompleteResponse, IChatDetail, IChatDynamicRequest, IChatFollowup, IChatProgress, IChatProvider, IChatProviderInfo, IChatReplyFollowup, IChatRequest, IChatResponse, IChatService, IChatTransferredSessionData, IChatUserActionEvent, ISlashCommand, InteractiveSessionCopyKind, InteractiveSessionVoteDirection } from 'vs/workbench/contrib/chat/common/chatService'; import { IChatSlashCommandService, IChatSlashFragment } from 'vs/workbench/contrib/chat/common/chatSlashCommands'; @@ -436,7 +436,7 @@ export class ChatService extends Disposable implements IChatService { private async _sendRequestAsync(model: ChatModel, provider: IChatProvider, message: string | IChatReplyFollowup, usedSlashCommand?: ISlashCommand): Promise { const resolvedAgent = typeof message === 'string' ? this.resolveAgent(message) : undefined; - let request: ChatRequestModel; + const request = model.addRequest(message, resolvedAgent); const resolvedCommand = typeof message === 'string' && message.startsWith('/') ? await this.handleSlashCommand(model.sessionId, message) : message; @@ -492,7 +492,6 @@ export class ChatService extends Disposable implements IChatService { let slashCommandFollowups: IChatFollowup[] | void = []; if (typeof message === 'string' && resolvedAgent) { - request = model.addRequest(message); const history: IChatMessage[] = []; for (const request of model.getRequests()) { if (typeof request.message !== 'string' || !request.response) { @@ -511,7 +510,6 @@ export class ChatService extends Disposable implements IChatService { slashCommandFollowups = agentResult?.followUp; rawResponse = { session: model.session! }; } else if ((typeof resolvedCommand === 'string' && typeof message === 'string' && this.chatSlashCommandService.hasCommand(resolvedCommand))) { - request = model.addRequest(message); // contributed slash commands // TODO: spell this out in the UI const history: IChatMessage[] = []; @@ -533,20 +531,19 @@ export class ChatService extends Disposable implements IChatService { rawResponse = { session: model.session! }; } else { - const requestProps: IChatRequest = { + const request: IChatRequest = { session: model.session!, message: resolvedCommand, variables: {} }; - if (typeof requestProps.message === 'string') { - const varResult = await this.chatVariablesService.resolveVariables(requestProps.message, model, token); - requestProps.variables = varResult.variables; - requestProps.message = varResult.prompt; + if (typeof request.message === 'string') { + const varResult = await this.chatVariablesService.resolveVariables(request.message, model, token); + request.variables = varResult.variables; + request.message = varResult.prompt; } - request = model.addRequest(requestProps.message); - rawResponse = await provider.provideReply(requestProps, progressCallback, token); + rawResponse = await provider.provideReply(request, progressCallback, token); } if (token.isCancellationRequested) { diff --git a/src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.ts b/src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.ts index 13ae0ab4aed5fb..346f0fef8cd149 100644 --- a/src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.ts +++ b/src/vs/workbench/contrib/codeEditor/browser/emptyTextEditorHint/emptyTextEditorHint.ts @@ -34,6 +34,7 @@ import { Registry } from 'vs/platform/registry/common/platform'; import { Extensions, IConfigurationMigrationRegistry } from 'vs/workbench/common/configuration'; import { LOG_MODE_ID, OUTPUT_MODE_ID } from 'vs/workbench/services/output/common/output'; import { SEARCH_RESULT_LANGUAGE_ID } from 'vs/workbench/services/search/common/search'; +import { GHOST_TEXT_DESCRIPTION } from 'vs/editor/contrib/inlineCompletions/browser/ghostTextWidget'; const $ = dom.$; @@ -74,7 +75,6 @@ export class EmptyTextEditorHintContribution implements IEditorContribution { this.toDispose = []; this.toDispose.push(this.editor.onDidChangeModel(() => this.update())); this.toDispose.push(this.editor.onDidChangeModelLanguage(() => this.update())); - this.toDispose.push(this.editor.onDidChangeModelDecorations(() => this.update())); this.toDispose.push(this.configurationService.onDidChangeConfiguration(e => { if (e.affectsConfiguration(emptyTextEditorHintSetting)) { this.update(); @@ -102,19 +102,14 @@ export class EmptyTextEditorHintContribution implements IEditorContribution { return false; } - const model = this.editor.getModel(); - const languageId = model?.getLanguageId(); - if (!model || languageId === OUTPUT_MODE_ID || languageId === LOG_MODE_ID || languageId === SEARCH_RESULT_LANGUAGE_ID) { + const hasGhostText = this.editor.getLineDecorations(0)?.find((d) => d.options.description === GHOST_TEXT_DESCRIPTION); + if (hasGhostText) { return false; } - const conflictingDecoration = this.editor.getLineDecorations(1)?.find((d) => - d.options.beforeContentClassName - || d.options.afterContentClassName - || d.options.before?.content - || d.options.after?.content - ); - if (conflictingDecoration) { + const model = this.editor.getModel(); + const languageId = model?.getLanguageId(); + if (languageId === OUTPUT_MODE_ID || languageId === LOG_MODE_ID || languageId === SEARCH_RESULT_LANGUAGE_ID) { return false; } diff --git a/src/vs/workbench/contrib/comments/browser/commentNode.ts b/src/vs/workbench/contrib/comments/browser/commentNode.ts index 7c98a5622c1d4d..4a859f036a41e5 100644 --- a/src/vs/workbench/contrib/comments/browser/commentNode.ts +++ b/src/vs/workbench/contrib/comments/browser/commentNode.ts @@ -488,7 +488,7 @@ export class CommentNode extends Disposable { }); const lastLine = this._commentEditorModel.getLineCount(); - const lastColumn = this._commentEditorModel.getLineLength(lastLine) + 1; + const lastColumn = this._commentEditorModel.getLineContent(lastLine).length + 1; this._commentEditor.setSelection(new Selection(lastLine, lastColumn, lastLine, lastColumn)); const commentThread = this.commentThread; diff --git a/src/vs/workbench/contrib/comments/browser/commentService.ts b/src/vs/workbench/contrib/comments/browser/commentService.ts index 8e5f5e4de7dcd9..303f24a6a84fa8 100644 --- a/src/vs/workbench/contrib/comments/browser/commentService.ts +++ b/src/vs/workbench/contrib/comments/browser/commentService.ts @@ -430,7 +430,7 @@ export class CommentService extends Disposable implements ICommentService { changedOwners.add(pendingComment.owner); } else { const commentsForOwner = this._continueOnComments.get(pendingComment.owner)!; - if (commentsForOwner.every(comment => (comment.uri.toString() !== pendingComment.uri.toString()) || !Range.equalsRange(comment.range, pendingComment.range))) { + if (commentsForOwner.every(comment => (comment.uri.toString() !== pendingComment.uri.toString()) || !Range.equalsRange(comment.range, pendingComment.range) || (comment.body !== pendingComment.body))) { commentsForOwner.push(pendingComment); changedOwners.add(pendingComment.owner); } diff --git a/src/vs/workbench/contrib/comments/browser/commentThreadWidget.ts b/src/vs/workbench/contrib/comments/browser/commentThreadWidget.ts index 4b12128a3d1139..bfae89f49af9c0 100644 --- a/src/vs/workbench/contrib/comments/browser/commentThreadWidget.ts +++ b/src/vs/workbench/contrib/comments/browser/commentThreadWidget.ts @@ -227,7 +227,7 @@ export class CommentThreadWidget extends } display(lineHeight: number) { - const headHeight = Math.max(23, Math.ceil(lineHeight * 1.2)); // 23 is the value of `Math.ceil(lineHeight * 1.2)` with the default editor font size + const headHeight = Math.ceil(lineHeight * 1.2); this._header.updateHeight(headHeight); this._body.display(); diff --git a/src/vs/workbench/contrib/comments/browser/simpleCommentEditor.ts b/src/vs/workbench/contrib/comments/browser/simpleCommentEditor.ts index 0ff28e473883fc..f087642f26bbef 100644 --- a/src/vs/workbench/contrib/comments/browser/simpleCommentEditor.ts +++ b/src/vs/workbench/contrib/comments/browser/simpleCommentEditor.ts @@ -62,12 +62,12 @@ export class SimpleCommentEditor extends CodeEditorWidget { this._commentEditorFocused = ctxCommentEditorFocused.bindTo(scopedContextKeyService); this._commentEditorEmpty = CommentContextKeys.commentIsEmpty.bindTo(scopedContextKeyService); - this._commentEditorEmpty.set(!this.getModel()?.getValueLength()); + this._commentEditorEmpty.set(!this.getValue()); this._parentThread = parentThread; this._register(this.onDidFocusEditorWidget(_ => this._commentEditorFocused.set(true))); - this._register(this.onDidChangeModelContent(e => this._commentEditorEmpty.set(!this.getModel()?.getValueLength()))); + this._register(this.onDidChangeModelContent(e => this._commentEditorEmpty.set(!this.getValue()))); this._register(this.onDidBlurEditorWidget(_ => this._commentEditorFocused.reset())); } diff --git a/src/vs/workbench/contrib/externalTerminal/electron-sandbox/externalTerminal.contribution.ts b/src/vs/workbench/contrib/externalTerminal/electron-sandbox/externalTerminal.contribution.ts index 7b36ebba216c4e..92be8da593c812 100644 --- a/src/vs/workbench/contrib/externalTerminal/electron-sandbox/externalTerminal.contribution.ts +++ b/src/vs/workbench/contrib/externalTerminal/electron-sandbox/externalTerminal.contribution.ts @@ -5,7 +5,7 @@ import * as nls from 'vs/nls'; import * as paths from 'vs/base/common/path'; -import { DEFAULT_TERMINAL_OSX, IExternalTerminalSettings } from 'vs/platform/externalTerminal/common/externalTerminal'; +import { DEFAULT_TERMINAL_OSX, IExternalTerminalService, IExternalTerminalSettings } from 'vs/platform/externalTerminal/common/externalTerminal'; import { MenuId, MenuRegistry } from 'vs/platform/actions/common/actions'; import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; import { IHistoryService } from 'vs/workbench/services/history/common/history'; @@ -14,7 +14,7 @@ import { Schemas } from 'vs/base/common/network'; import { IConfigurationRegistry, Extensions, ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; import { Registry } from 'vs/platform/registry/common/platform'; import { IWorkbenchContribution, IWorkbenchContributionsRegistry, Extensions as WorkbenchExtensions } from 'vs/workbench/common/contributions'; -import { IExternalTerminalService } from 'vs/platform/externalTerminal/electron-sandbox/externalTerminalService'; +import { IExternalTerminalMainService } from 'vs/platform/externalTerminal/electron-sandbox/externalTerminalMainService'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { TerminalContextKeys } from 'vs/workbench/contrib/terminal/common/terminalContextKey'; import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remoteAuthorityResolver'; @@ -84,7 +84,7 @@ MenuRegistry.appendMenuItem(MenuId.CommandPalette, { export class ExternalTerminalContribution implements IWorkbenchContribution { public _serviceBrand: undefined; - constructor(@IExternalTerminalService private readonly _externalTerminalService: IExternalTerminalService) { + constructor(@IExternalTerminalMainService private readonly _externalTerminalService: IExternalTerminalMainService) { this._updateConfiguration(); } diff --git a/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts b/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts index d6c151043f0f70..faf84eafbf967c 100644 --- a/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts +++ b/src/vs/workbench/contrib/files/browser/editors/fileEditorInput.ts @@ -433,8 +433,8 @@ export class FileEditorInput extends AbstractTextResourceEditorInput implements untypedInput.languageId = this.getLanguageId(); untypedInput.contents = (() => { const model = this.textFileService.files.get(this.resource); - if (model?.isDirty() && !model.textEditorModel.isTooLargeForHeapOperation()) { - return model.textEditorModel.getValue(); // only if dirty and not too large + if (model?.isDirty()) { + return model.textEditorModel.getValue(); // only if dirty } return undefined; diff --git a/src/vs/workbench/contrib/preferences/browser/preferences.contribution.ts b/src/vs/workbench/contrib/preferences/browser/preferences.contribution.ts index 6bf05c15a820a8..ab3b550f8b17d0 100644 --- a/src/vs/workbench/contrib/preferences/browser/preferences.contribution.ts +++ b/src/vs/workbench/contrib/preferences/browser/preferences.contribution.ts @@ -204,11 +204,11 @@ class PreferencesActionsContribution extends Disposable implements IWorkbenchCon menu: [{ id: MenuId.GlobalActivity, group: '2_configuration', - order: 2 + order: 1 }, { id: MenuId.MenubarPreferencesMenu, group: '2_configuration', - order: 2 + order: 1 }], }); } @@ -773,7 +773,7 @@ class PreferencesActionsContribution extends Disposable implements IWorkbenchCon { id: MenuId.GlobalActivity, group: '2_configuration', - order: 4 + order: 3 } ] }); @@ -789,7 +789,7 @@ class PreferencesActionsContribution extends Disposable implements IWorkbenchCon title: nls.localize('keyboardShortcuts', "Keyboard Shortcuts"), }, group: '2_configuration', - order: 4 + order: 3 })); registerAction2(class extends Action2 { constructor() { diff --git a/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts b/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts index 91eed4d33fc019..44bf36ad369d51 100644 --- a/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts +++ b/src/vs/workbench/contrib/preferences/browser/settingsEditor2.ts @@ -1800,8 +1800,7 @@ class SyncControls extends Disposable { container: HTMLElement, @ICommandService private readonly commandService: ICommandService, @IUserDataSyncService private readonly userDataSyncService: IUserDataSyncService, - @IUserDataSyncEnablementService private readonly userDataSyncEnablementService: IUserDataSyncEnablementService, - @ITelemetryService telemetryService: ITelemetryService, + @IUserDataSyncEnablementService private readonly userDataSyncEnablementService: IUserDataSyncEnablementService ) { super(); @@ -1812,14 +1811,10 @@ class SyncControls extends Disposable { DOM.hide(this.lastSyncedLabel); this.turnOnSyncButton.enabled = true; - this.turnOnSyncButton.label = localize('turnOnSyncButton', "Backup and Sync Settings"); + this.turnOnSyncButton.label = localize('turnOnSyncButton', "Turn on Settings Sync"); DOM.hide(this.turnOnSyncButton.element); this._register(this.turnOnSyncButton.onDidClick(async () => { - telemetryService.publicLog2<{}, { - owner: 'sandy081'; - comment: 'This event tracks whenever settings sync is turned on from settings editor.'; - }>('sync/turnOnSyncFromSettings'); await this.commandService.executeCommand('workbench.userDataSync.actions.turnOn'); })); diff --git a/src/vs/workbench/contrib/scm/browser/media/scm.css b/src/vs/workbench/contrib/scm/browser/media/scm.css index f92c54db113eda..f937d75dd31c44 100644 --- a/src/vs/workbench/contrib/scm/browser/media/scm.css +++ b/src/vs/workbench/contrib/scm/browser/media/scm.css @@ -132,10 +132,6 @@ .scm-view .monaco-list-row .history-item-group .monaco-icon-label > .monaco-icon-label-container { display: flex; } -.scm-view .monaco-list-row .history-item-group .monaco-icon-label > .monaco-icon-label-container .monaco-icon-description-container { - overflow: hidden; - text-overflow: ellipsis; -} .scm-sync-view .monaco-list-row .monaco-icon-label .icon-container .scm-sync-view .monaco-list-row .monaco-icon-label .icon-container { diff --git a/src/vs/workbench/contrib/scm/browser/scmSyncViewPane.ts b/src/vs/workbench/contrib/scm/browser/scmSyncViewPane.ts index 5e0db441a808f8..ad69941cc4dd91 100644 --- a/src/vs/workbench/contrib/scm/browser/scmSyncViewPane.ts +++ b/src/vs/workbench/contrib/scm/browser/scmSyncViewPane.ts @@ -36,11 +36,6 @@ import { ISCMHistoryItem, ISCMHistoryItemChange, ISCMHistoryItemGroup } from 'vs import { localize } from 'vs/nls'; import { Iterable } from 'vs/base/common/iterator'; import { IListAccessibilityProvider } from 'vs/base/browser/ui/list/listWidget'; -import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; -import { basename, dirname } from 'vs/base/common/resources'; -import { ILabelService } from 'vs/platform/label/common/label'; -import { stripIcons } from 'vs/base/common/iconLabels'; -import { FileKind } from 'vs/platform/files/common/files'; type TreeElement = ISCMRepository[] | ISCMRepository | ISCMActionButton | SCMHistoryItemGroupTreeElement | SCMHistoryItemTreeElement | SCMHistoryItemChangeTreeElement; @@ -64,7 +59,7 @@ function toDiffEditorArguments(uri: URI, originalUri: URI, modifiedUri: URI): un const originalShortRef = originalQuery.ref.substring(0, 8).concat(originalQuery.ref.endsWith('^') ? '^' : ''); const modifiedShortRef = modifiedQuery.ref.substring(0, 8).concat(modifiedQuery.ref.endsWith('^') ? '^' : ''); - return [originalUri, modifiedUri, `${basename} (${originalShortRef}) ↔ ${basename} (${modifiedShortRef})`, null]; + return [originalUri, modifiedUri, `${basename} (${originalShortRef}) ↔ ${basename} (${modifiedShortRef})`]; } function getSCMResourceId(element: TreeElement): string { @@ -174,8 +169,8 @@ interface HistoryItemTemplate { readonly iconContainer: HTMLElement; // readonly avatarImg: HTMLImageElement; readonly iconLabel: IconLabel; - // readonly timestampContainer: HTMLElement; - // readonly timestamp: HTMLSpanElement; + readonly timestampContainer: HTMLElement; + readonly timestamp: HTMLSpanElement; readonly disposables: IDisposable; } @@ -194,10 +189,10 @@ class HistoryItemRenderer implements ITreeRenderer, index: number, templateData: HistoryItemTemplate, height: number | undefined): void { @@ -255,7 +250,6 @@ class HistoryItemChangeRenderer implements ITreeRenderer, index: number, templateData: HistoryItemChangeTemplate, height: number | undefined): void { templateData.fileLabel.setFile(node.element.uri, { fileDecorations: { colors: false, badges: true }, - fileKind: FileKind.FILE, hidePath: false, }); } @@ -267,49 +261,8 @@ class HistoryItemChangeRenderer implements ITreeRenderer { - constructor( - @ILabelService private readonly labelService: ILabelService, - @IWorkspaceContextService private readonly workspaceContextService: IWorkspaceContextService - ) { } - getAriaLabel(element: TreeElement): string { - if (isSCMRepository(element)) { - let folderName = ''; - if (element.provider.rootUri) { - const folder = this.workspaceContextService.getWorkspaceFolder(element.provider.rootUri); - - if (folder?.uri.toString() === element.provider.rootUri.toString()) { - folderName = folder.name; - } else { - folderName = basename(element.provider.rootUri); - } - } - return `${folderName} ${element.provider.label}`; - } else if (isSCMHistoryItemGroupTreeElement(element)) { - return `${stripIcons(element.label).trim()}${element.description ? `, ${element.description}` : ''}`; - } else if (isSCMActionButton(element)) { - return element.button?.command.title ?? ''; - } else if (isSCMHistoryItemTreeElement(element)) { - return `${stripIcons(element.label).trim()}${element.description ? `, ${element.description}` : ''}`; - } else if (isSCMHistoryItemChangeTreeElement(element)) { - const result: string[] = []; - - result.push(basename(element.uri)); - - // TODO - add decoration - // if (element.decorations.tooltip) { - // result.push(element.decorations.tooltip); - // } - - const path = this.labelService.getUriLabel(dirname(element.uri), { relative: true, noPrefix: true }); - - if (path) { - result.push(path); - } - - return result.join(', '); - } - + // TODO - add aria labels return ''; } getWidgetAriaLabel(): string { @@ -374,7 +327,6 @@ class SCMSyncViewPaneTreeSorter implements ITreeSorter { export class SCMSyncViewPane extends ViewPane { private listLabels!: ResourceLabels; - private treeContainer!: HTMLElement; private _tree!: WorkbenchAsyncDataTree; private _viewModel!: SCMSyncPaneViewModel; @@ -401,7 +353,7 @@ export class SCMSyncViewPane extends ViewPane { protected override renderBody(container: HTMLElement): void { super.renderBody(container); - this.treeContainer = append(container, $('.scm-view.scm-sync-view')); + const treeContainer = append(container, $('.scm-view.scm-sync-view.file-icon-themable-tree')); this.listLabels = this.instantiationService.createInstance(ResourceLabels, { onDidChangeVisibility: this.onDidChangeBodyVisibility }); this._register(this.listLabels); @@ -409,7 +361,7 @@ export class SCMSyncViewPane extends ViewPane { this._tree = this.instantiationService.createInstance( WorkbenchAsyncDataTree, 'SCM Sync View', - this.treeContainer, + treeContainer, new ListDelegate(), [ this.instantiationService.createInstance(RepositoryRenderer, getActionViewItemProvider(this.instantiationService)), @@ -421,21 +373,15 @@ export class SCMSyncViewPane extends ViewPane { this.instantiationService.createInstance(SCMSyncDataSource), { horizontalScrolling: false, - accessibilityProvider: this.instantiationService.createInstance(SCMSyncViewPaneAccessibilityProvider), - identityProvider: this.instantiationService.createInstance(SCMSyncViewPaneTreeIdentityProvider), - sorter: this.instantiationService.createInstance(SCMSyncViewPaneTreeSorter), + accessibilityProvider: new SCMSyncViewPaneAccessibilityProvider(), + identityProvider: new SCMSyncViewPaneTreeIdentityProvider(), + sorter: new SCMSyncViewPaneTreeSorter(), }) as WorkbenchAsyncDataTree; this._register(this._tree); this._register(this._tree.onDidOpen(this.onDidOpen, this)); this._viewModel = this.instantiationService.createInstance(SCMSyncPaneViewModel, this._tree); - - this.treeContainer.classList.add('file-icon-themable-tree'); - this.treeContainer.classList.add('show-file-icons'); - - this.updateIndentStyles(this.themeService.getFileIconTheme()); - this._register(this.themeService.onDidFileIconThemeChange(this.updateIndentStyles, this)); } protected override layoutBody(height: number, width: number): void { @@ -448,15 +394,11 @@ export class SCMSyncViewPane extends ViewPane { return; } else if (isSCMHistoryItemChangeTreeElement(e.element)) { if (e.element.originalUri && e.element.modifiedUri) { - await this.commandService.executeCommand(API_OPEN_DIFF_EDITOR_COMMAND_ID, ...toDiffEditorArguments(e.element.uri, e.element.originalUri, e.element.modifiedUri), e); + await this.commandService.executeCommand(API_OPEN_DIFF_EDITOR_COMMAND_ID, ...toDiffEditorArguments(e.element.uri, e.element.originalUri, e.element.modifiedUri)); } } } - private updateIndentStyles(theme: any): void { - this.treeContainer.classList.toggle('align-icons-and-twisties', theme.hasFileIcons || (theme.hasFileIcons && !theme.hasFolderIcons)); - } - override dispose(): void { this.disposables.dispose(); super.dispose(); @@ -466,8 +408,6 @@ export class SCMSyncViewPane extends ViewPane { class SCMSyncPaneViewModel { private repositories = new Map(); - private historyProviders = new Map(); - private alwaysShowRepositories = false; private readonly disposables = new DisposableStore(); @@ -494,16 +434,15 @@ class SCMSyncPaneViewModel { private _onDidChangeVisibleRepositories({ added, removed }: ISCMViewVisibleRepositoryChangeEvent): void { for (const repository of added) { - const repositoryDisposable = repository.provider.onDidChangeHistoryProvider(() => this._onDidChangeHistoryProvider(repository)); - this._onDidChangeHistoryProvider(repository); + const repositoryDisposable: IDisposable = combinedDisposable( + repository.provider.onDidChangeHistoryProviderActionButton(() => this.refresh(repository)), + repository.provider.onDidChangeHistoryProviderCurrentHistoryItemGroup(() => this.refresh(repository)) + ); - this.repositories.set(repository, repositoryDisposable); + this.repositories.set(repository, { dispose() { repositoryDisposable.dispose(); } }); } for (const repository of removed) { - this.historyProviders.get(repository)?.dispose(); - this.historyProviders.delete(repository); - this.repositories.get(repository)?.dispose(); this.repositories.delete(repository); } @@ -511,19 +450,6 @@ class SCMSyncPaneViewModel { this.refresh(); } - private _onDidChangeHistoryProvider(repository: ISCMRepository): void { - if (repository.provider.historyProvider) { - const historyProviderDisposable = combinedDisposable( - repository.provider.historyProvider.onDidChangeActionButton(() => this.refresh(repository)), - repository.provider.historyProvider.onDidChangeCurrentHistoryItemGroup(() => this.refresh(repository))); - - this.historyProviders.set(repository, historyProviderDisposable); - } else { - this.historyProviders.get(repository)?.dispose(); - this.historyProviders.delete(repository); - } - } - private async refresh(repository?: ISCMRepository): Promise { if (this.repositories.size === 0) { return; @@ -574,14 +500,14 @@ class SCMSyncDataSource implements IAsyncDataSource { } else if (isSCMRepository(element)) { const scmProvider = element.provider; const historyProvider = scmProvider.historyProvider; - const historyItemGroup = historyProvider?.currentHistoryItemGroup; + const historyItemGroup = historyProvider?.currentHistoryItemGroup(); if (!historyProvider || !historyItemGroup) { return children; } // Action Button - const actionButton = historyProvider.actionButton; + const actionButton = historyProvider.actionButton(); if (actionButton) { children.push({ type: 'actionButton', @@ -590,21 +516,15 @@ class SCMSyncDataSource implements IAsyncDataSource { } as ISCMActionButton); } - // History item group base - const historyItemGroupBase = await historyProvider.resolveHistoryItemGroupBase(historyItemGroup.id); - if (!historyItemGroupBase) { - return children; - } - // Common ancestor, ahead, behind - const ancestor = await historyProvider.resolveHistoryItemGroupCommonAncestor(historyItemGroup.id, historyItemGroupBase.id); + const ancestor = await historyProvider.resolveHistoryItemGroupCommonAncestor(historyItemGroup.id, historyItemGroup.upstream?.id); // Incoming - if (historyItemGroupBase) { + if (historyItemGroup?.upstream) { children.push({ - id: historyItemGroupBase.id, - label: `$(cloud-download) ${historyItemGroupBase.label}`, - description: localize('incoming', "Incoming Changes"), + id: historyItemGroup.upstream.id, + label: localize('incoming', "$(cloud-download) Incoming Changes"), + description: historyItemGroup.upstream.label, ancestor: ancestor?.id, count: ancestor?.behind ?? 0, repository: element, @@ -616,8 +536,8 @@ class SCMSyncDataSource implements IAsyncDataSource { if (historyItemGroup) { children.push({ id: historyItemGroup.id, - label: `$(cloud-upload) ${historyItemGroup.label}`, - description: localize('outgoing', "Outgoing Changes"), + label: localize('outgoing', "$(cloud-upload) Outgoing Changes"), + description: historyItemGroup.label, ancestor: ancestor?.id, count: ancestor?.ahead ?? 0, repository: element, diff --git a/src/vs/workbench/contrib/scm/common/history.ts b/src/vs/workbench/contrib/scm/common/history.ts index b9f6792c9ea0ce..7fd225a37cdf03 100644 --- a/src/vs/workbench/contrib/scm/common/history.ts +++ b/src/vs/workbench/contrib/scm/common/history.ts @@ -3,26 +3,16 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { Event } from 'vs/base/common/event'; import { ThemeIcon } from 'vs/base/common/themables'; import { URI } from 'vs/base/common/uri'; import { ISCMActionButtonDescriptor } from 'vs/workbench/contrib/scm/common/scm'; export interface ISCMHistoryProvider { - - readonly onDidChangeActionButton: Event; - readonly onDidChangeCurrentHistoryItemGroup: Event; - - get actionButton(): ISCMActionButtonDescriptor | undefined; - set actionButton(button: ISCMActionButtonDescriptor | undefined); - - get currentHistoryItemGroup(): ISCMHistoryItemGroup | undefined; - set currentHistoryItemGroup(historyItemGroup: ISCMHistoryItemGroup | undefined); - + actionButton: () => ISCMActionButtonDescriptor | undefined; + currentHistoryItemGroup: () => ISCMHistoryItemGroup | undefined; provideHistoryItems(historyItemGroupId: string, options: ISCMHistoryOptions): Promise; provideHistoryItemChanges(historyItemId: string): Promise; - resolveHistoryItemGroupBase(historyItemGroupId: string): Promise; - resolveHistoryItemGroupCommonAncestor(historyItemGroupId1: string, historyItemGroupId2: string): Promise<{ id: string; ahead: number; behind: number } | undefined>; + resolveHistoryItemGroupCommonAncestor(historyItemGroupId1: string, historyItemGroupId2: string | undefined): Promise<{ id: string; ahead: number; behind: number } | undefined>; } export interface ISCMHistoryOptions { diff --git a/src/vs/workbench/contrib/scm/common/scm.ts b/src/vs/workbench/contrib/scm/common/scm.ts index e7d39bfecbb2ac..52d9d7637c7694 100644 --- a/src/vs/workbench/contrib/scm/common/scm.ts +++ b/src/vs/workbench/contrib/scm/common/scm.ts @@ -67,7 +67,8 @@ export interface ISCMProvider extends IDisposable { readonly commitTemplate: string; readonly historyProvider?: ISCMHistoryProvider; readonly onDidChangeCommitTemplate: Event; - readonly onDidChangeHistoryProvider: Event; + readonly onDidChangeHistoryProviderActionButton: Event; + readonly onDidChangeHistoryProviderCurrentHistoryItemGroup: Event; readonly onDidChangeStatusBarCommands?: Event; readonly acceptInputCommand?: Command; readonly actionButton?: ISCMActionButtonDescriptor; diff --git a/src/vs/workbench/contrib/snippets/browser/commands/configureSnippets.ts b/src/vs/workbench/contrib/snippets/browser/commands/configureSnippets.ts index 396482865cc30e..9d2a199fe186e5 100644 --- a/src/vs/workbench/contrib/snippets/browser/commands/configureSnippets.ts +++ b/src/vs/workbench/contrib/snippets/browser/commands/configureSnippets.ts @@ -236,8 +236,8 @@ export class ConfigureSnippetsAction extends SnippetsAction { }, f1: true, menu: [ - { id: MenuId.MenubarPreferencesMenu, group: '2_configuration', order: 5 }, - { id: MenuId.GlobalActivity, group: '2_configuration', order: 5 }, + { id: MenuId.MenubarPreferencesMenu, group: '2_configuration', order: 4 }, + { id: MenuId.GlobalActivity, group: '2_configuration', order: 4 }, ] }); } diff --git a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts index 81cb217e4b6bc3..a252d8e4814d69 100644 --- a/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts +++ b/src/vs/workbench/contrib/tasks/browser/abstractTaskService.ts @@ -231,7 +231,6 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer public onDidChangeTaskSystemInfo: Event = this._onDidChangeTaskSystemInfo.event; private _onDidReconnectToTasks: Emitter = new Emitter(); public onDidReconnectToTasks: Event = this._onDidReconnectToTasks.event; - public get isReconnected(): boolean { return this._tasksReconnected; } constructor( @IConfigurationService private readonly _configurationService: IConfigurationService, @@ -350,7 +349,6 @@ export abstract class AbstractTaskService extends Disposable implements ITaskSer this._attemptTaskReconnection(); } else { this._tasksReconnected = true; - this._onDidReconnectToTasks.fire(); } }); } diff --git a/src/vs/workbench/contrib/tasks/browser/runAutomaticTasks.ts b/src/vs/workbench/contrib/tasks/browser/runAutomaticTasks.ts index a4b4239b43c923..55ec14e22a0ec7 100644 --- a/src/vs/workbench/contrib/tasks/browser/runAutomaticTasks.ts +++ b/src/vs/workbench/contrib/tasks/browser/runAutomaticTasks.ts @@ -28,18 +28,19 @@ export class RunAutomaticTasks extends Disposable implements IWorkbenchContribut @IWorkspaceTrustManagementService private readonly _workspaceTrustManagementService: IWorkspaceTrustManagementService, @ILogService private readonly _logService: ILogService) { super(); - if (this._taskService.isReconnected) { - this._tryRunTasks(); - } else { - this._register(Event.once(this._taskService.onDidReconnectToTasks)(async () => await this._tryRunTasks())); - } - this._register(this._workspaceTrustManagementService.onDidChangeTrust(async () => await this._tryRunTasks())); + this._taskService.onDidReconnectToTasks((() => { + if (this._workspaceTrustManagementService.isWorkspaceTrusted()) { + this._tryRunTasks(); + } + })); + this._register(this._workspaceTrustManagementService.onDidChangeTrust(async trusted => { + if (trusted) { + await this._tryRunTasks(); + } + })); } private async _tryRunTasks() { - if (!this._workspaceTrustManagementService.isWorkspaceTrusted()) { - return; - } if (this._hasRunTasks || this._configurationService.getValue(ALLOW_AUTOMATIC_TASKS) === 'off') { return; } diff --git a/src/vs/workbench/contrib/tasks/browser/task.contribution.ts b/src/vs/workbench/contrib/tasks/browser/task.contribution.ts index f4388813f7c85f..8ab974d4cbe784 100644 --- a/src/vs/workbench/contrib/tasks/browser/task.contribution.ts +++ b/src/vs/workbench/contrib/tasks/browser/task.contribution.ts @@ -365,7 +365,7 @@ class UserTasksGlobalActionContribution extends Disposable implements IWorkbench }, when: TaskExecutionSupportedContext, group: '2_configuration', - order: 6 + order: 4 })); this._register(MenuRegistry.appendMenuItem(MenuId.MenubarPreferencesMenu, { command: { @@ -374,7 +374,7 @@ class UserTasksGlobalActionContribution extends Disposable implements IWorkbench }, when: TaskExecutionSupportedContext, group: '2_configuration', - order: 6 + order: 4 })); } } diff --git a/src/vs/workbench/contrib/tasks/common/taskService.ts b/src/vs/workbench/contrib/tasks/common/taskService.ts index 5799f23fd49e26..c96cba1125df0b 100644 --- a/src/vs/workbench/contrib/tasks/common/taskService.ts +++ b/src/vs/workbench/contrib/tasks/common/taskService.ts @@ -64,7 +64,6 @@ export interface IWorkspaceFolderTaskResult extends IWorkspaceTaskResult { export interface ITaskService { readonly _serviceBrand: undefined; onDidStateChange: Event; - isReconnected: boolean; onDidReconnectToTasks: Event; supportsMultipleTaskExecutions: boolean; diff --git a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts index d14a577769d756..3b01c31dff1e0e 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalActions.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalActions.ts @@ -491,7 +491,7 @@ export function registerTerminalActions() { return; } c.service.setActiveInstance(instance); - focusActiveTerminal(instance, c); + return c.groupService.showPanel(true); } }); diff --git a/src/vs/workbench/contrib/themes/browser/themes.contribution.ts b/src/vs/workbench/contrib/themes/browser/themes.contribution.ts index 090221014d81f0..2dcb37944d76c8 100644 --- a/src/vs/workbench/contrib/themes/browser/themes.contribution.ts +++ b/src/vs/workbench/contrib/themes/browser/themes.contribution.ts @@ -723,13 +723,13 @@ MenuRegistry.appendMenuItem(MenuId.GlobalActivity, { title: localize('themes', "Themes"), submenu: ThemesSubMenu, group: '2_configuration', - order: 7 + order: 6 }); MenuRegistry.appendMenuItem(MenuId.MenubarPreferencesMenu, { title: localize({ key: 'miSelectTheme', comment: ['&& denotes a mnemonic'] }, "&&Theme"), submenu: ThemesSubMenu, group: '2_configuration', - order: 7 + order: 6 }); MenuRegistry.appendMenuItem(ThemesSubMenu, { diff --git a/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.ts b/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.ts index bf6cc44b59118e..769878ced7df6d 100644 --- a/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.ts +++ b/src/vs/workbench/contrib/userDataProfile/browser/userDataProfile.ts @@ -95,7 +95,7 @@ export class UserDataProfilesWorkbenchContribution extends Disposable implements return getProfilesTitle(); }, submenu: ProfilesMenu, - group: '2_configuration', + group: '1_profiles', order: 1, }); MenuRegistry.appendMenuItem(MenuId.MenubarPreferencesMenu, { @@ -103,7 +103,7 @@ export class UserDataProfilesWorkbenchContribution extends Disposable implements return getProfilesTitle(); }, submenu: ProfilesMenu, - group: '2_configuration', + group: '1_profiles', order: 1, when: PROFILES_ENABLEMENT_CONTEXT, }); diff --git a/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts b/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts index 215e53b2f9b3eb..1549fc0631e94f 100644 --- a/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts +++ b/src/vs/workbench/contrib/userDataSync/browser/userDataSync.ts @@ -727,20 +727,20 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo constructor() { super({ id: 'workbench.userDataSync.actions.turnOn', - title: { value: localize('global activity turn on sync', "Backup and Sync Settings..."), original: 'Backup and Sync Settings...' }, + title: { value: localize('global activity turn on sync', "Turn on Settings Sync..."), original: 'Turn on Settings Sync...' }, category: { value: SYNC_TITLE, original: `Settings Sync` }, f1: true, precondition: when, menu: [{ - group: '3_settings_sync', + group: '1_profiles', id: MenuId.GlobalActivity, when, - order: 1 + order: 2 }, { - group: '3_settings_sync', + group: '1_profiles', id: MenuId.MenubarPreferencesMenu, when, - order: 1 + order: 2 }, { group: '1_settings', id: MenuId.AccountsContext, @@ -764,7 +764,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo title: localize('turnin on sync', "Turning on Settings Sync..."), precondition: ContextKeyExpr.false(), menu: [{ - group: '3_settings_sync', + group: '1_profiles', id: MenuId.GlobalActivity, when, order: 2 @@ -811,7 +811,7 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo id: 'workbench.userData.actions.signin', title: localize('sign in global', "Sign in to Sync Settings"), menu: { - group: '3_settings_sync', + group: '1_profiles', id: MenuId.GlobalActivity, when, order: 2 @@ -851,12 +851,12 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo f1: true, precondition: CONTEXT_HAS_CONFLICTS, menu: [{ - group: '3_settings_sync', + group: '1_profiles', id: MenuId.GlobalActivity, when: CONTEXT_HAS_CONFLICTS, order: 2 }, { - group: '3_settings_sync', + group: '1_profiles', id: MenuId.MenubarPreferencesMenu, when: CONTEXT_HAS_CONFLICTS, order: 2 @@ -881,13 +881,13 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo menu: [ { id: MenuId.GlobalActivity, - group: '3_settings_sync', + group: '1_profiles', when, order: 2 }, { id: MenuId.MenubarPreferencesMenu, - group: '3_settings_sync', + group: '1_profiles', when, order: 2, }, @@ -1150,7 +1150,6 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo const uriIdentityService = accessor.get(IUriIdentityService); const fileService = accessor.get(IFileService); const userDataSyncMachinesService = accessor.get(IUserDataSyncMachinesService); - const notificationService = accessor.get(INotificationService); const result = await fileDialogService.showOpenDialog({ title: localize('download sync activity dialog title', "Select folder to download Settings Sync activity"), @@ -1186,8 +1185,6 @@ export class UserDataSyncWorkbenchContribution extends Disposable implements IWo return userDataSyncWorkbenchService.downloadSyncActivity(uriIdentityService.extUri.joinPath(result[0], indexes[0] !== 0 ? name : `${name} ${indexes[indexes.length - 1] + 1}`)); }); - - notificationService.info(localize('download sync activity complete', "Successfully downloaded Settings Sync activity.")); } })); diff --git a/src/vs/workbench/services/dialogs/browser/simpleFileDialog.ts b/src/vs/workbench/services/dialogs/browser/simpleFileDialog.ts index 9d3f6a883d2957..fc6b15a756bb57 100644 --- a/src/vs/workbench/services/dialogs/browser/simpleFileDialog.ts +++ b/src/vs/workbench/services/dialogs/browser/simpleFileDialog.ts @@ -999,12 +999,26 @@ export class SimpleFileDialog implements ISimpleFileDialog { return sorted; } + private extname(file: URI): string { + const ext = resources.extname(file); + if (ext.length === 0) { + const basename = resources.basename(file); + if (basename.startsWith('.')) { + return basename; + } + } else { + return ext; + } + return ''; + } + private filterFile(file: URI): boolean { if (this.options.filters) { + const ext = this.extname(file); for (let i = 0; i < this.options.filters.length; i++) { for (let j = 0; j < this.options.filters[i].extensions.length; j++) { const testExt = this.options.filters[i].extensions[j]; - if ((testExt === '*') || (file.path.endsWith('.' + testExt))) { + if ((testExt === '*') || (ext === ('.' + testExt))) { return true; } } diff --git a/src/vs/workbench/test/browser/workbenchTestServices.ts b/src/vs/workbench/test/browser/workbenchTestServices.ts index 1a62f5f9cd64f3..ab2bc3c34ea52e 100644 --- a/src/vs/workbench/test/browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/browser/workbenchTestServices.ts @@ -1396,7 +1396,7 @@ export class TestInMemoryFileSystemProvider extends InMemoryFileSystemProvider i | FileSystemProviderCapabilities.FileReadStream; } - override readFileStream(resource: URI): ReadableStreamEvents { + readFileStream(resource: URI): ReadableStreamEvents { const BUFFER_SIZE = 64 * 1024; const stream = newWriteableStream(data => VSBuffer.concat(data.map(data => VSBuffer.wrap(data))).buffer); diff --git a/src/vs/workbench/workbench.common.main.ts b/src/vs/workbench/workbench.common.main.ts index b4ad16270af81b..1f6253a29b644c 100644 --- a/src/vs/workbench/workbench.common.main.ts +++ b/src/vs/workbench/workbench.common.main.ts @@ -47,7 +47,6 @@ import 'vs/workbench/browser/parts/paneCompositePart'; import 'vs/workbench/browser/parts/banner/bannerPart'; import 'vs/workbench/browser/parts/statusbar/statusbarPart'; import 'vs/workbench/browser/parts/views/viewsService'; -import 'vs/workbench/browser/iconSelectBox'; //#endregion diff --git a/src/vscode-dts/vscode.proposed.chatAgents.d.ts b/src/vscode-dts/vscode.proposed.chatAgents.d.ts index 6f52c6498df1a7..e668dbbdd2cffb 100644 --- a/src/vscode-dts/vscode.proposed.chatAgents.d.ts +++ b/src/vscode-dts/vscode.proposed.chatAgents.d.ts @@ -27,6 +27,8 @@ declare module 'vscode' { fullName?: string; icon?: Uri; subCommands: ChatAgentCommand[]; + requireCommand?: boolean; // Do some agents not have a default action? + isImplicit?: boolean; // Only @workspace. slash commands get promoted to the top-level and this agent is invoked when those are used } export interface ChatAgent { diff --git a/src/vscode-dts/vscode.proposed.scmHistoryProvider.d.ts b/src/vscode-dts/vscode.proposed.scmHistoryProvider.d.ts index 5d81cf2a1f42fa..5fad4bd5da4cac 100644 --- a/src/vscode-dts/vscode.proposed.scmHistoryProvider.d.ts +++ b/src/vscode-dts/vscode.proposed.scmHistoryProvider.d.ts @@ -31,9 +31,9 @@ declare module 'vscode' { provideHistoryItems(historyItemGroupId: string, options: SourceControlHistoryOptions, token: CancellationToken): ProviderResult; provideHistoryItemChanges(historyItemId: string, token: CancellationToken): ProviderResult; + resolveHistoryItemGroupCommonAncestor(historyItemGroupId1: string, historyItemGroupId2: string | undefined, token: CancellationToken): ProviderResult<{ id: string; ahead: number; behind: number }>; - resolveHistoryItemGroupBase(historyItemGroupId: string, token: CancellationToken): ProviderResult; - resolveHistoryItemGroupCommonAncestor(historyItemGroupId1: string, historyItemGroupId: string, token: CancellationToken): ProviderResult<{ id: string; ahead: number; behind: number }>; + // resolveHistoryItemGroup(historyItemGroupId: string, token: CancellationToken): ProviderResult; } export interface SourceControlHistoryOptions { diff --git a/yarn.lock b/yarn.lock index 924eaed8282987..a7b290ff3cd74d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1304,10 +1304,10 @@ bindings "^1.5.0" node-addon-api "^6.0.0" -"@vscode/proxy-agent@^0.17.4": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@vscode/proxy-agent/-/proxy-agent-0.17.4.tgz#e3ffb63357353a428436f15a69de3453a5061f0c" - integrity sha512-tX8eidofoJlZFRWzdiiW3wyu26hgIRk8HvM/RoP1wVSu3U/As36EgGIZYG6pPnqiythRqTcsddniVNA5M39g4w== +"@vscode/proxy-agent@^0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@vscode/proxy-agent/-/proxy-agent-0.17.3.tgz#ae46cb64d58a1a2ba063321eb4e3339eaba703b8" + integrity sha512-l+00ALcWQyDsW3kd22uOeAn84KHFkixnk/STiBFRxltbTiaiJsHCCpjlmX+x/RK+B97FcRLlg+MRRb7jtWAnng== dependencies: "@tootallnate/once" "^3.0.0" agent-base "^7.0.1" @@ -10008,10 +10008,10 @@ typescript@^4.7.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6" integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ== -typescript@^5.3.0-dev.20230919: - version "5.3.0-dev.20230919" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.0-dev.20230919.tgz#ee93ccb19d16a89b562bcd851d31e20e545b2ed0" - integrity sha512-FU6DZhzId38aY/dX2gHp7phaYkbNJkCx8G//VVs0nVzZv0qjWGggLkMXoMipphO8Hv0TvZu30Zwdt6nzFIbcBQ== +typescript@^5.3.0-dev.20230911: + version "5.3.0-dev.20230911" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.0-dev.20230911.tgz#7f60e82ee86e381655ddc63141408eb90b6ca31d" + integrity sha512-2iI2l7OuGvU668gBje+JQKE8bsf7SH8w8ScwUkENHCcrbaDpXa/Oqfuwq5gdFM7SfVfp5p6c8kHZRMvL+kabJg== typical@^4.0.0: version "4.0.0"